五个字节 高到低四个字节的解析

时间:2022-06-26 10:34:18
byte[] myByteArray = new byte[] { 0x00, 0x01 , 0x02  , 0x8B , 0xB9 };
00 01 02   8B为整数部分从高到低的四个字节
B9为小数

c# 怎么解析这个为数字啊 

14 个解决方案

#1


条件不足!
要换算成怎样的十进制数才是对的?

#2


myByteArray[4]<<|myByteArray[3]<<|myByteArray[2]<<|myByteArray[1<<|myByteArray[0]

#3


16进制转换为10进制然后连起来不就行了;

#4


int n = BitConverter.ToInt32(myByteArray, 0);
            string s1 = n.ToString() + "." + myByteArray[4].ToString();
            double t = double.Parse(s1);

#5


引用 2 楼 DOwnstairs 的回复:
myByteArray[4]<<|myByteArray[3]<<|myByteArray[2]<<|myByteArray[1<<|myByteArray[0]


您好   五个字节 高到低四个字节的解析

您看下我是哪里写错了吗

#6


语法错!不要想当然

#7


引用 3 楼 porenasckx 的回复:
16进制转换为10进制然后连起来不就行了;


万一是前4个字节按照32位整型的原始字节形式表示呢?

#8


引用 7 楼 sp1234 的回复:
Quote: 引用 3 楼 porenasckx 的回复:

16进制转换为10进制然后连起来不就行了;


万一是前4个字节按照32位整型的原始字节形式表示呢?


那就得问LZ这里边到底是用的16位还是32位了。。。。

#9


.net 的 Int 32 字节表示是从低到高的,但是你的表示是从高到低,所以需要转一下方向。可以这样转换值
byte[] myByteArray = new byte[] { 0x00, 0x01, 0x02, 0x8B, 0xB9 };
var myByteArray1 = new byte[4];
Array.Copy(myByteArray, myByteArray1, 4);
Array.Reverse(myByteArray1);
var x = BitConverter.ToInt32(myByteArray1, 0);
var y = (int)myByteArray[4];
var result = x + y / 256.0;

#10


你的高4个字节的说明还算是比较容易理解,但是说“B9为小数”这就比较模糊了。还是需要更明白地说明你的转换规则!

#11


LZ说的最后一位小数应该是小数位,比如转换结果为56,表示0.56;不知道我理解的对不对;

#12


引用 10 楼 sp1234 的回复:
你的高4个字节的说明还算是比较容易理解,但是说“B9为小数”这就比较模糊了。还是需要更明白地说明你的转换规则!
五个字节 高到低四个字节的解析
您能帮我看下吗

     byte[] myByteArray = new byte[] { 0x00, 0x00, 0x00, 0x01, 0x4F };
            int d = 0;
            int c = 4;
            for (int i = 0; i < c; i++)
            {
                d |= myByteArray[i] << ((c - i - 1) * 8);
            }
            MessageBox.Show(d + "." + myByteArray[c]);//结果 1.79    实际数值为1.31

#13


引用 9 楼 sp1234 的回复:
.net 的 Int 32 字节表示是从低到高的,但是你的表示是从高到低,所以需要转一下方向。可以这样转换值
byte[] myByteArray = new byte[] { 0x00, 0x01, 0x02, 0x8B, 0xB9 };
var myByteArray1 = new byte[4];
Array.Copy(myByteArray, myByteArray1, 4);
Array.Reverse(myByteArray1);
var x = BitConverter.ToInt32(myByteArray1, 0);
var y = (int)myByteArray[4];
var result = x + y / 256.0;

您这样也是可以的  如果在我刚刚的代码上  怎么修改呢

#14


整数部分很容易做,并且已有明确的规则
小数部分的规则不明确
0xB9 表示的是十进制数 185 还是二进制数 0.10111001(十进制 0.72265625)

#1


条件不足!
要换算成怎样的十进制数才是对的?

#2


myByteArray[4]<<|myByteArray[3]<<|myByteArray[2]<<|myByteArray[1<<|myByteArray[0]

#3


16进制转换为10进制然后连起来不就行了;

#4


int n = BitConverter.ToInt32(myByteArray, 0);
            string s1 = n.ToString() + "." + myByteArray[4].ToString();
            double t = double.Parse(s1);

#5


引用 2 楼 DOwnstairs 的回复:
myByteArray[4]<<|myByteArray[3]<<|myByteArray[2]<<|myByteArray[1<<|myByteArray[0]


您好   五个字节 高到低四个字节的解析

您看下我是哪里写错了吗

#6


语法错!不要想当然

#7


引用 3 楼 porenasckx 的回复:
16进制转换为10进制然后连起来不就行了;


万一是前4个字节按照32位整型的原始字节形式表示呢?

#8


引用 7 楼 sp1234 的回复:
Quote: 引用 3 楼 porenasckx 的回复:

16进制转换为10进制然后连起来不就行了;


万一是前4个字节按照32位整型的原始字节形式表示呢?


那就得问LZ这里边到底是用的16位还是32位了。。。。

#9


.net 的 Int 32 字节表示是从低到高的,但是你的表示是从高到低,所以需要转一下方向。可以这样转换值
byte[] myByteArray = new byte[] { 0x00, 0x01, 0x02, 0x8B, 0xB9 };
var myByteArray1 = new byte[4];
Array.Copy(myByteArray, myByteArray1, 4);
Array.Reverse(myByteArray1);
var x = BitConverter.ToInt32(myByteArray1, 0);
var y = (int)myByteArray[4];
var result = x + y / 256.0;

#10


你的高4个字节的说明还算是比较容易理解,但是说“B9为小数”这就比较模糊了。还是需要更明白地说明你的转换规则!

#11


LZ说的最后一位小数应该是小数位,比如转换结果为56,表示0.56;不知道我理解的对不对;

#12


引用 10 楼 sp1234 的回复:
你的高4个字节的说明还算是比较容易理解,但是说“B9为小数”这就比较模糊了。还是需要更明白地说明你的转换规则!
五个字节 高到低四个字节的解析
您能帮我看下吗

     byte[] myByteArray = new byte[] { 0x00, 0x00, 0x00, 0x01, 0x4F };
            int d = 0;
            int c = 4;
            for (int i = 0; i < c; i++)
            {
                d |= myByteArray[i] << ((c - i - 1) * 8);
            }
            MessageBox.Show(d + "." + myByteArray[c]);//结果 1.79    实际数值为1.31

#13


引用 9 楼 sp1234 的回复:
.net 的 Int 32 字节表示是从低到高的,但是你的表示是从高到低,所以需要转一下方向。可以这样转换值
byte[] myByteArray = new byte[] { 0x00, 0x01, 0x02, 0x8B, 0xB9 };
var myByteArray1 = new byte[4];
Array.Copy(myByteArray, myByteArray1, 4);
Array.Reverse(myByteArray1);
var x = BitConverter.ToInt32(myByteArray1, 0);
var y = (int)myByteArray[4];
var result = x + y / 256.0;

您这样也是可以的  如果在我刚刚的代码上  怎么修改呢

#14


整数部分很容易做,并且已有明确的规则
小数部分的规则不明确
0xB9 表示的是十进制数 185 还是二进制数 0.10111001(十进制 0.72265625)