【问题标题】:double value transferring in byte stream字节流中的双值传输
【发布时间】: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 个字节

标签: c# c++ arrays double


【解决方案1】:

问题是您发送十个字节。双精度是 8 个字节,加上你的 3 个字节的标头,这意味着你应该发送 11 个字节。

如果您调整 bytes 数组并发送正确的长度,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多