我正在尝试编写将任意大字节数组(大于64位)转换为c#中表示为字符串的十进制数的函数,我根本无法弄清楚如何去做.
例如以下代码......
Console.WriteLine(ConvertToString(
new byte[]
{
0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00
}));
Run Code Online (Sandbox Code Playgroud)
..应打印出来
22774453838368691933757882222884355840
Run Code Online (Sandbox Code Playgroud)
我不想仅仅使用像biginteger这样的额外库,因为我希望它很简单并且想要了解它是如何工作的.
一些准则:
不要忘记根据需要扩展每个矩阵,或者根据传递的字节数确定所需的最大大小.
编辑,上面第三步的示例:
值= [0xAA,0xBB]初始电流= []初始温度= []
使用0xAA
现在有了0xBB
现在我们只需要连接结果43707.
基于@Wilheim 的回答:
static string BytesToString(byte[] data) {
// Minimum length 1.
if (data.Length == 0) return "0";
// length <= digits.Length.
var digits = new byte[(data.Length * 0x00026882/* (int)(Math.Log(2, 10) * 0x80000) */ + 0xFFFF) >> 16];
int length = 1;
// For each byte:
for (int j = 0; j != data.Length; ++j) {
// digits = digits * 256 + data[j].
int i, carry = data[j];
for (i = 0; i < length || carry != 0; ++i) {
int value = digits[i] * 256 + carry;
carry = Math.DivRem(value, 10, out value);
digits[i] = (byte)value;
}
// digits got longer.
if (i > length) length = i;
}
// Return string.
var result = new StringBuilder(length);
while (0 != length) result.Append((char)('0' + digits[--length]));
return result.ToString();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2013 次 |
| 最近记录: |