代码之家  ›  专栏  ›  技术社区  ›  xCrypt0

如何从具有全十六进制值的字节数组中返回一个字节?

  •  1
  • xCrypt0  · 技术社区  · 8 年前

    byte[] buffer1 = File.ReadAllBytes(path).Skip(startPos).Take(lengthToExtract).ToArray();
    byte[] reversed = buffer1.Reverse().ToArray();
    string buffer2 = "";
    foreach (var i in reversed)
    {
       buffer2 = buffer2 + i.ToString("X") + " ";
    }
    MessageBox.Show(buffer2);
    int size = int.Parse(buffer2.Replace(" ", string.Empty), System.Globalization.NumberStyles.HexNumber);
    return size;
    

    但当我得到十六进制字符串缓冲区值的消息框时,它会去掉“不重要”的十六进制数,这会弄乱我的值。例如,如果读取的字节为0x00,则返回的值仅为0,并且我正在向后读取结果字节,因此:0x04080(0 4 0 80)与0x0040080(0 0 4 0 80)不同。我需要帮助。这会把我的整个计划搞砸。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Yuri S    8 年前

    这里有两个可以使用的函数。它们将解决这两个问题-两位数和字节顺序

        public static string HexStringFromArrayChangeEndian(byte[] data)
        {
            StringBuilder sdata = new StringBuilder();
            for (int s = data.Length - 1; s >= 0; s--)
                sdata.Append(string.Format("{0:X}", data[s]).PadLeft(2, '0'));
            return sdata.ToString();
        }
    
        public static string HexStringFromArraySameEndian(byte[] data)
        {
            StringBuilder sdata = new StringBuilder();
            for (int s = 0; s < data.Length; s++)
                sdata.Append(string.Format("{0:X}", data[s]).PadLeft(2, '0'));
            return sdata.ToString();
        }
    
        2
  •  1
  •   Lee Hiles    8 年前

    使用 i.ToString("X2") 。将强制字符串输出“00”,而不是简化的“0”