gpt4 book ai didi

c# - 从字节数组(蓝牙)解析短

转载 作者:可可西里 更新时间:2023-11-01 02:46:22 27 4
gpt4 key购买 nike

我正在解析一些使用蓝牙发送的数据包,我使用的代码与我之前用来解析 TCP 数据包的代码相同,即使字节数组被正确接收,短值在解析时也会有所不同。

p>

这是 PrintByteArray 打印的内容:

byte[] { 0, 1, 0, 4, 0, 0, 0, 1, 66, 112, 0, 1, ...}

PrintByteArray(data);

int commandType = (int)BitConverter.ToInt16(data, 0);
int payloadSize = (int)BitConverter.ToInt16(data, 2);

Debug.WriteLine(commandType); // prints 256 instead of 1
Debug.WriteLine(payloadSize); // prints 1024 instead of 4

我不确定我做错了什么,一切看起来都很好。

最佳答案

BitConverter 使用机器的字节顺序(通常是窗口的小字节序)。您收到的数据采用大端格式。您可以使用 IPAddress.NetworkToHostOrder 来正确读取数据。

这是您的代码,其中包含一个帮助程序,可将 Big Endian 转换为 Little Endian。

PrintByteArray(data);

int commandType = (int)BigToLittleEndian(BitConverter.ToInt16(data, 0));
int payloadSize = (int)BigToLittleEndian(BitConverter.ToInt16(data, 2));

Debug.WriteLine(commandType); // prints 256 instead of 1
Debug.WriteLine(payloadSize); // prints 1024 instead of 4


static short BigToLittleEndian(short value)
{
return BitConverter.IsLittleEndian ? System.Net.IPAddress.NetworkToHostOrder(value) : value;
}

关于c# - 从字节数组(蓝牙)解析短,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35374492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com