所以我创建了一个读取字节数组并返回值
的程序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)不同。我需要帮助,这会弄乱我的整个计划。
答案 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();
}