我将一个包含1,2或4个十六进制值的List保存为十进制值。我想将它们转换为一个十进制数。
示例:的
List<Byte>
值:1和95(= 0x01,0x5F)
我想将列表转换为一个十进制数: 0x015F = 351
我该怎么做?
答案 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
程序集。)