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

时间:2017-07-17 17:57:15

标签: c# arrays numbers hex byte

所以我创建了一个读取字节数组并返回值

的程序
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(00 04 00 80)不同。我需要帮助,这会弄乱我的整个计划。

2 个答案:

答案 0 :(得分:1)

使用i.ToString("X2")。将强制输出" 00"而不是简化" 0"

答案 1 :(得分:1)

以下是您可以使用的2个功能。他们将解决这两个问题 - 双位数和字节顺序

    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();
    }