将带有十六进制值的List <byte>转换为十进制</byte>

时间:2014-07-18 08:56:04

标签: c# .net

我将一个包含1,2或4个十六进制值的List保存为十进制值。我想将它们转换为一个十进制数。

示例:

List<Byte>值:1和95(= 0x01,0x5F)

我想将列表转换为一个十进制数: 0x015F = 351

我该怎么做?

3 个答案:

答案 0 :(得分:4)

var result = 0;
var i = 0;
foreach (var val in values) 
{
    result = (result << i) + (int)val;
    i += 8;
}

答案 1 :(得分:0)

现代,基于LINQ的方式(古老的C程序员可以转入一个人的坟墓):

List<Byte> list = new List<byte>() { 0x01, 0x5F };
var output = list.Select(x => (int)x)
                 .Reverse()
                 .Aggregate((x, y) => (int)0x100 * y + (int)x);

答案 2 :(得分:0)

使用BitConverter课程,您可以执行以下操作:

  var values = new List<byte> { 0x01, 0x5F, };

  byte[] arr = new byte[4];
  for (int i = 0; i < values.Count; ++i)
    arr[values.Count - 1 - i] = values[i];
  int result = BitConverter.ToInt32(arr, 0);

从中间向后填充数组arr,如图所示。

如果数字可以更大(即List<>最长可达8个字节),请使用ulong(从不为负数),例如:

  var values = new List<byte> { 0x01, 0x5F, };

  byte[] arr = new byte[8];
  for (int i = 0; i < values.Count; ++i)
    arr[values.Count - 1 - i] = values[i];
  ulong result = BitConverter.ToUInt64(arr, 0);

如果List<>可以任意长,请使用new BigInteger(arr)(要求csproj引用System.Numerics.dll程序集。)