我正在尝试使用 Bitconverter 将 byte array
转换为 hexadecimal
值类。
long hexValue = 0X780B13436587;
byte[] byteArray = BitConverter.GetBytes ( hexValue );
string hexResult = BitConverter.ToString ( byteArray );
现在如果我逐行执行上面的代码,这就是我所看到的
我认为 hexResult 字符串与 hexValue 相同(即 780B13436587h),但我得到的是不同的,我是否遗漏了什么,如果我错了请纠正我。
谢谢!
最佳答案
字节顺序。
BitConverter
使用 CPU-endianness,对大多数人来说这意味着:little-endian。当人类写数字时,我们倾向于写大端(广义上讲:你写的是千位,然后是百位,然后是十位,然后是数字)。对于 CPU,big-endian 意味着最高有效字节是first,最低有效字节是last。但是,除非您使用的是 Itanium,否则您的 CPU 可能是小端字节序的,这意味着最高有效字节是最后,而最低有效字节是第一个>。 CPU 的实现使得这无关紧要,除非您正在窥视原始内存 - 它将确保数字和二进制算法仍然按照您期望的方式工作。但是,BitConverter
工作 通过查看原始内存内部 - 因此您会看到反转的数据。
如果您想要大端格式的值,那么您需要:
- 按大端顺序手动执行
- 检查
BitConverter.IsLittleEndian
值,如果true
:- 要么反转输入字节
- 或反转输出
关于c# - 使用 C# 中的 BitConverter 类将字节数组转换为十六进制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996837/