【发布时间】:2012-10-30 11:15:32
【问题描述】:
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 个字节,出了什么问题?
【问题讨论】:
-
你不是在复制你的
double超出你的数组边界吗? -
听起来像是字节序差异(大端与小端)。
BitConverter使用 CPU 字节序,因此您可能必须反转块。我最近发布了一些答案...尝试:stackoverflow.com/questions/13044200/…(显然,您需要将其扩展到 8 个字节) -
这只是我的错,只发送了 10 个字节