我很困惑为什么这不起作用,有人可以提供一些见解吗?
我有一个接受整数值的函数,但想将十六进制值的高两位存储到字节数组元素中。
假设距离为(24,135) 10 或(5E47) 16
public ConfigureReportOptionsMessageData(int Distance, int DistanceCheckTime)
{
...
this._data = new byte[9];
this._data[0] = (byte)(Distance & 0x00FF); // shows 47
this._data[1] = (byte)(Distance & 0xFF00); // shows 00
this._data[2] = (byte)(DistanceCheckTime & 0xFF);
...
}
答案 0 :(得分:2)
这似乎应该使用BitConverter.GetBytes - 它将提供更简单的选项。
答案 1 :(得分:2)
this._data[1] = (byte)(Distance >> 8);
答案 2 :(得分:1)
0
获得_data[1]
的原因是,当您转换为byte
时,前3个字节会丢失。
您的中间结果如下所示:
Distance && 0xff00 = 0x00005e00;
当转换为字节时,只保留低位字节:
(byte)0x00005e00 = 0x00;
您需要移位8位:
0x00005e00 >> 8 = 0x0000005e;
在转换为byte
并指定给_data[1]
之前