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

San*_*VEE 1 c# bitconverter

我正在尝试使用Bitconverter类将值转换byte arrayhexadecimal值.

long hexValue = 0X780B13436587;
byte[] byteArray = BitConverter.GetBytes ( hexValue );
string hexResult = BitConverter.ToString ( byteArray );
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

我认为hexResult字符串与hexValue(即780B13436587h)相同,但我得到的是不同的,我错过了什么,如果我错了,请纠正我.

谢谢!

Mar*_*ell 5

字节序.

BitConverter使用CPU-endianness,对大多数人来说意味着:little-endian.当人们写数字时,我们倾向于写大端(广义上说:你写成数千,然后数百,然后是数十,然后是数字).对于CPU,big-endian意味着最重要的字节是第一个,最不重要的字节是最后一个.但是,除非您使用Itanium,否则您的CPU可能是little-endian,这意味着最重要的字节是最后一个,而最不重要的字节是第一个.除非你在原始内存中窥视,否则实现CPU 无关紧要 - 它将确保数值和二进制算法仍然按预期方式工作.然而,通过在原始内存中窥视BitConverter 工作 - 因此您可以看到反转的数据.

如果你想要big-endian格式的值,那么你需要:

  • 以big-endian顺序手动完成
  • 检查BitConverter.IsLittleEndian值,如果true:
    • 要么反转输入字节
    • 或反转输出