c# - 使用 C# 中的 BitConverter 类将字节数组转换为十六进制值?

标签 c# bitconverter

我正在尝试使用 Bitconverterbyte array 转换为 hexadecimal 值类。

long hexValue = 0X780B13436587;
byte[] byteArray = BitConverter.GetBytes ( hexValue );
string hexResult = BitConverter.ToString ( byteArray );

现在如果我逐行执行上面的代码,这就是我所看到的

enter image description here

我认为 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/

相关文章:

c# - 如何从 C# 就地更新命令行输出

c# - 如何访问每个循环的 html 属性以进行编码?

c# - 你必须调用 "WebSecurity.InitializeDatabaseConnection"但我知道

r - 将二进制字符串转换为二进制或十进制值

c# - 将原始字节数据转换为 float[] 并且值需要介于 -1 和 1 之间

c# - 如何根据 ID 从员工薪水第二高的员工集合中选择具有 LINQ 的不同员工?

c# - 当类型可以是两种不同事物之一时的设计选项

c# - 如何将字节数组转换为通用数组?

vb.net - c++将字符串转换为字节以通过tcp发送

c# - 将 byte[] 数组转换为长度减半的 short[] 数组