微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将大端字节转换为整数?

如何解决将大端字节转换为整数?

我有这个python代码

f = open('file.bin','rb')
b = f.read(2)
bytes = b[0x0:0x2] //this is b'\x10\x24',for example
f.close()
a = int.from_bytes(bytes,'big') //returns 4132

我似乎无法弄清楚如何在C#中实现同一目标。

找到此方法

public static int IntFromBigEndianBytes(byte[] data,int startIndex = 0)
    {
      return (data[startIndex] << 24) | (data[startIndex + 1] << 16) | (data[startIndex + 2] << 8) | data[startIndex + 3];
    }

尝试该方法总是会导致IndexOutOfRangeException,因为我的输入字节小于4。了解为什么会发生这种情况,否则将不胜感激。

解决方法

忽略任何其他问题。有很多方法可以做到这一点,实际上,您要问的是如何获取一个表示 16位值(shortInt16)的字节数组并将其分配给int

给予

public static int IntFromBigEndianBytes(byte[] data) 
    => (data[0] << 8) | data[1];

public static int IntFromBigEndianBytes2(byte[] data) 
    => BitConverter.ToInt16(data.Reverse().ToArray());

用法

var someArray = new byte[]{0x10,0x24};

Console.WriteLine(IntFromBigEndianBytes(someArray));
Console.WriteLine(IntFromBigEndianBytes2(someArray));

输出

4132
4132

Full Demo Here

注意,您还应该使用BitConverter.IsLittleEndian == false通过这些方法确定系统的字节序,并反转大字节序体系结构上的逻辑

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。