将字节数组转换为十六进制时丢失字符

我想将随机字节数组转换为十六进制,没有错误,但让我显示输出:

第一个输出例如:D2C13E9C4C9378C7

第二个空格应该相同:D2 C1 3 9C 4C 93 78 C7

        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();
        }
wiyalala 回答:将字节数组转换为十六进制时丢失字符

问题出在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();
}
本文链接:https://www.f2er.com/3149492.html

大家都在问