gpt4 book ai didi

c# - 将字节数组转换为一个十进制数作为字符串

转载 作者:太空狗 更新时间:2023-10-29 17:47:25 27 4
gpt4 key购买 nike

我正在尝试编写将任意大型字节数组(大于 64 位)转换为在 C# 中表示为字符串的十进制数的函数,但我根本不知道该怎么做。

例如下面的代码...

Console.WriteLine(ConvertToString(
new byte[]
{
0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00
}));

..应该打印出来

22774453838368691933757882222884355840

我不想只使用像 biginteger 这样的额外库为此,因为我希望它简单并且喜欢了解它是如何工作的。

最佳答案

一些准则:

  1. 您需要将数字的数字保存在矩阵中,每个数字一个空格。矩阵开始是空的。
  2. 然后你需要一个矩阵来保存矩阵的乘法。它也开始是空的。
  3. 现在对于每个字节你有:
    1. 先将当前数矩阵的每一位乘以256,将10取模保存在对应的临时数中,将除以10的数加到下一位乘法。
    2. 将临时乘法矩阵赋给当前数字矩阵。
    3. 然后将字节添加到第一个数字。
    4. 修正当前矩阵,只保存每个索引中的10模,并将除以10的值传递给下一个索引。
  4. 然后您需要连接字符串中的每个数字。
  5. 返回字符串。

不要忘记根据需要扩展每个矩阵,或者根据传递的字节数确定所需的最大大小。

编辑,上面第三步之后的例子:

值 = [0xAA, 0xBB]初始电流 = []初始温度 = []

有 0xAA

  1. 没有什么可以相乘的。
  2. 作业没有变化。
  3. 我们将 0xAA 添加到 current 中的第一个值:Current = [170]
  4. 我们修正 current 以仅保存模数,将除以 10 的值传递给下一个值:
    1. 第 1 个数字:当前 = [0] 通过 17。
    2. 第二位数字:Current = [0, 7] pass 1。
    3. 第 3 位数字:Current = [0, 7, 1] 没有要传递的值,因此流程结束。

现在有 0xBB

  1. 乘以 256,保存在 temp 中并更正,对每个数字执行:
    1. 第一个数字:Temp = [0],0 保存到下一个数字。
    2. 第 2 位:校正前 Temp = [0, 1792],校正后 Temp = [0, 2],179 通过。
    3. 第三位:校正前 Temp = [0, 2, 1 * 256 + 179 = 435],校正后 Temp = [0, 2, 5], 43 通过。
    4. 第 4 位:Temp = [0, 2, 5, 43] 之前,Temp = [0, 2, 5, 3], 3 之后通过
    5. 第5位:Temp = [0, 2, 5, 3, 4] 修正前后,没有数字保存,所以乘法结束。
  2. 将温度分配给电流:Current = [0, 2, 5, 3, 4];温度 = []
  3. 将当前值加到第一位:Current = [187, 2, 5, 3, 4]
  4. 更正值:
    1. 第一个数字:当前 = [7, 2, 5, 3, 4], 18 及格。
    2. 第 2 位:当前 = [7, 0, 5, 3, 4], 2 及格。
    3. 第 3 位:Current = [7, 0, 7, 3, 4],没有要传递的,因此加法结束。

现在我们只需要连接结果 43707。

关于c# - 将字节数组转换为一个十进制数作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2423902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com