我想将随机字节数组转换为十六进制,没有错误,但让我显示输出:
第一个输出例如:D2C13E9C4C9378C7
第二个空格应该相同:D2 C1 3 9C 4C 93 78 C7 <-它只是在3之后删除了E,有人知道为什么吗?
static void Main(string[] args)
{
// with string interpolation
Random rnd = new Random();
byte[] bytes = new byte[8];
rnd.NextBytes(bytes);
long l = BitConverter.ToInt64(bytes, 0);
Console.WriteLine($"Without To Hex Method: {l:X}");
string hexstring = ToHex(bytes);
Console.WriteLine($"With To Hex Method: {hexstring}");
Console.ReadKey();
}
public static string ToHex(byte[] arr)
{
StringBuilder sb = new StringBuilder();
var arr1 = arr.Reverse().ToArray();
for (int i = 0; i < arr1.Length; i++)
{
sb.Append($"{arr1[i]:X2} ");
}
sb.Remove(arr.Length - 1, 1);
return sb.ToString();
}
答案 0 :(得分:0)
问题出在sb.Remove(arr.Length - 1, 1)
上:arr.Length
不是sb.Length
,因为char是2个字节,所以您在左半部分的中部附近丢失了一些char。
您可以使用它:
static public string ToHex(byte[] array)
{
var builder = new StringBuilder();
array = array.Reverse().ToArray();
for ( int index = 0; index < array.Length; index++ )
{
builder.Append($"{array[i]:X2} ");
}
return builder.ToString().TrimEnd();
}
但是反转数组是没有用的,并且会降低速度和内存,因为您可以减少循环的次数:
static public string ToHex(byte[] array)
{
var builder = new StringBuilder();
for ( int index = array.Length - 1; index >= 0; index-- )
{
builder.Append($"{array[i]:X2} ");
}
return builder.ToString().TrimEnd();
}