为什么 BigInteger.ToByteArray 返回单项数组而不是多项数组?
为什么将字节数组转换为BigInteger,如果所有成员提交0或255,结果是单项数组而不是多项数组?例如:
byte[] byteArray = { 0, 0, 0, 0 };
BigInteger newBigInt = new BigInteger(byteArray);
MessageBox.Show(newBigInt.ToString());
byte[] bytes;
bytes = newBigInt.ToByteArray();
MessageBox.Show(string.Join(", ", bytes));
此代码仅返回一个零,而不是一个由四个零组成的数组。 255 也是如此。有谁知道为什么另一个具有相似项目的输出数组被单独转换?
Why convert a byte array to BigInteger, If all members submit 0 or 255 the result is a single-item array instead of a multi-item array? for example:
byte[] byteArray = { 0, 0, 0, 0 };
BigInteger newBigInt = new BigInteger(byteArray);
MessageBox.Show(newBigInt.ToString());
byte[] bytes;
bytes = newBigInt.ToByteArray();
MessageBox.Show(string.Join(", ", bytes));
This code return only one zero instead of an array of four zeros. The same is true for the 255. Does anyone know why while another output array with similar items are converted separately?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
BigIngteger
不会在冗余主值上浪费空间。如果所有单个字节值均为零,则整个数字为零,可以表示为值为零的单个字节。因此 0000 与 0 是相同的值。如果所有值都是 255,则表示
0xFFFFFFFF
或 -1,因为它是有符号整数。由于 -1 可以表示为0xFF
、0xFFFF
、0xFFFFFF
等,因此保留这些冗余的前导字节是没有意义的。BigIngteger
doesn't waste space on redundant leading values. If all the individual byte values are zero, that makes the entire number zero which can be represented as a single byte with value zero. So 0000 is the same value as 0.If all values are 255, that represents
0xFFFFFFFF
or -1 since it's a signed integer. And since -1 can be represented as0xFF
,0xFFFF
,0xFFFFFF
etc., there's no point in keeping those redundant leading bytes.BigInteger 使用可变长度编码来表示数字。它必须如此,因为它需要表示任意大整数。
这是在
ToByteArray
文档中指定的...
另请参阅可变长度数量/LEB128 用于某些协议中使用的其他类型的可变长度编码。
BigInteger uses a variable length encoding to represent a number. It has to, since it needs to represent arbitrary large integers.
This is specified in the documentation to
ToByteArray
...
See also Variable Length Quantity/LEB128 for other kinds of variable length encodings used in some protocols.