c # — передача двойного значения в потоке байтов

C ++

unsigned char lbytes[] = { 0x0A, 0x01, 0x02 };
unsigned char bytes[10];

double dbl = sin((double)i) * 10;

i+=5; if (i == 360) i = 0;

memcpy(&bytes, &lbytes, 3);
cout << dbl << endl;
memcpy(&bytes[3], &dbl, sizeof(double));

C #

switch (m[1]) {
case 0x01: {
if (m.Length > 5) {
double myval = Math.Round( BitConverter.ToDouble(m, 3), 2 );

но здесь что-то идет не так, myval всегда очень мала, а с rount всегда равна 0.

вопрос в том, где моя ошибка, я вижу действительное значение в cout, я посылаю 10 байтов, что идет не так?

0

Решение

Проблема в том, что вы отправляете только десять байтов. Двойной восемь байт, плюс ваш заголовок из трех байтов, что означает, что вы должны отправить 11 байтов.

Если вы отрегулируете bytes массив и отправить правильную длину, он должен работать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector