我需要帮助在特定协议结构后的UDP流中发送带符号的十进制值。发送UDP流是小菜一碟,但将我的带符号十进制数转换为HEX 24位双组件有符号数是另一个故事,因为我不明白如何做到这一点。
以下是该协议中有关我必须发送的内容的说明:
该值以度为单位表示为24位二进制补码 数字,其中最高有效位(第23位)是符号位, 接下来的8位(位22到15)是整数部分,其余是 位(位14到0)是小数部分;或者,这可能 被认为是以1/32768度为单位的有符号整数值。 值的范围是-180.0度(A60000十六进制)到+180.0 度(5A0000十六进制)。
我知道如果有人可以在VB或C#中发布一段工作代码,我会非常感激。
答案 0 :(得分:1)
您必须在流中发送三个字节,但它不清楚的顺序是什么。你还必须确保它在正确的范围内。首先假设MSB:
WriteBytes(decimal value, Stream stream)
{
Int32 intValue = (int)(value * 32768);
byte byte1 = (byte)(intValue & 255);
intValue >>=8;
byte byte2 = (byte)(intValue & 255);
intValue >>=8;
byte byte3 = (byte)(intValue & 255);
stream.Write(byte3);
stream.Write(byte2);
stream.Write(byte1);
}