发布网友 发布时间:2022-04-23 19:32
共2个回答
热心网友 时间:2023-06-21 22:43
楼主 float转成 byte是很不好理解的
如果把他转换成int 然后再转成byte感觉比较合理
这应该是双方协议商定的
如: a=12.5
12.5 x 10=125
125转byte你再接收转换就容易了
转换后的值再除以10就是原值了
发送方拆解字节发送(高字节------->低字节)
a=125;
byte[]bytes=new byte[4];
bytes[0] = (byte)(a >> 24 & 0xFF);
bytes[1] = (byte)(a >> 16 & 0xFF);
bytes[2] = (byte)(a >> 8 & 0xFF);
bytes[3] = (byte)(a >> 0 & 0xFF);
接收方重组字节:
int b = 0x00;
b = b << 24 | bytes[0];
b = b << 16 | bytes[1];
b = b << 8 | bytes[2];
b = b << 0 | bytes[3];
(到这里b=125了,再除以10 就是12.5)
你用float转换是没法用移位操作的,而且转换出来的值你我都很难判断是什么
你给出的是C++操作指针地址 个人认为其他语言不好解析,暂且不说对不对,至少是不通用的
是的,就是说你们通讯的,但你们得按照协议来发送啊,如果发送方明白接受方不明白那就不叫协议了。你们之间没有沟通好吧
热心网友 时间:2023-06-21 22:43
byte[] buffer = new byte[] {0x00,0x3a,0x36,0xe8};
Console.WriteLine(BitConverter.ToSingle(buffer,0).ToString());
得到的是-3.442162E+24
BitConverter.GetBytes(12.5f);
得到的是{0x00,0x00,0x48,0x41};
原始数据有错吧。