如何将带符号的十进制转换为HEX 24位二进制补码有符号数

时间:2015-08-27 19:22:45

标签: c# vb.net

我需要帮助在特定协议结构后的UDP流中发送带符号的十进制值。发送UDP流是小菜一碟,但将我的带符号十进制数转换为HEX 24位双组件有符号数是另一个故事,因为我不明白如何做到这一点。

以下是该协议中有关我必须发送的内容的说明:

  

该值以度为单位表示为24位二进制补码   数字,其中最高有效位(第23位)是符号位,   接下来的8位(位22到15)是整数部分,其余是   位(位14到0)是小数部分;或者,这可能   被认为是以1/32768度为单位的有符号整数值。   值的范围是-180.0度(A60000十六进制)到+180.0   度(5A0000十六进制)。

我知道如果有人可以在VB或C#中发布一段工作代码,我会非常感激。

1 个答案:

答案 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);
}