byte []到未签名的BigInteger?
|
动机:
我想将哈希(MD5 / SHA1等)转换为十进制整数,以便在Code128C中制作条形码。
为简单起见,我希望所有结果(大)数字都为正。
我可以在C#中将byte []转换为BigInteger ...
到目前为止的样本:
byte[] data;
byte[] result;
BigInteger biResult;
result = shaM.ComputeHash(data);
biResult = new BigInteger(result);
但是(这里是生锈的CS)我是否可以始终以两种方式解释字节数组:
(A):作为签名号码
(B):无符号数字
是否可以从C#中的byte []生成UNSIGNED BigInteger?
我是否应该在字节[]的前面简单地添加一个0x00(零字节)?
编辑:
感谢AakashM,Jon和Adam Robinson,追加一个零字节就达到了我所需要的。
编辑2:
我应该做的主要事情是阅读BigInteger(byte [])构造函数的详细文档,然后我将看到有关如何通过附加零字节来限制为正数的部分。
没有找到相关结果
已邀请:
6 个回复
净爽
构造函数期望该数组采用小尾数顺序。如果您期望结果ѭ1具有特定值,请记住这一点。
车料
构造函数的文档,我们看到: 值中的各个字节 数组应为小端 顺序,从最低顺序字节到 最高位字节 [...] 建设者期望积极 字节数组中使用的值 符号和幅度表示,以及 负值使用二 补码表示。其他 字,如果 设置值的最高位字节, 得到的BigInteger值是 负。取决于来源 字节数组,这可能会导致 正值被误解为 负值。 [...] 阻止 来自的积极价值 被误解为负值,你 可以在末尾添加一个零字节的值 的数组。
缝皋
或
),在这种情况下,没有un1 un的无符号版本。 因此,换句话说,不,这是不可能的,但是由于
可以表示任意大的整数值,因此您不会因其带符号而失去任何范围。 关于第二个问题,由于
构造函数以Little-endian字节顺序分析值,因此您需要在数组的末尾附加
。
悲帽慑彤电
苛肠倒俱
,然后使用
(相当于
)将其设为绝对值:
从技术上讲,仅当
为负数时(例如,如果
),才需要使用
。
闯舱酮