我需要输入一个大于64位的数字输入,确保仅丢弃其余的83位(如果输入大于83位)并将其转换为十六进制字符串。
我发现我可以使用BigInteger(System.Numerics.BigInteger)接受来自用户的数字输入,但是我不确定如何进行此操作。我在下面概述了我的方法:
BigInteger myBigInteger = BigInteger.Parse("123456789012345678912345");
byte[] myByte = myBigInteger.ToByteArray();
if (myByte.Length < 11) // if input is less than 80 bits
{
// Convert Endianness to Big Endian
// Convert myBigInteger to hex and output
}
// Drop the elements greater than 11
// Convert element 10 to int and & it with 0x7F
// Replace the element in the array with the masked value
// Reverse array to obtain Big Endian
// Convert array into a hex string and output
我不确定要解决的问题是正确的方法。任何意见,将不胜感激。
谢谢。
答案 0 :(得分:1)
作弊! :-)
public static readonly BigInteger mask = new BigInteger(new byte[]
{
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x07
});
static void Main(string[] args)
{
BigInteger myBigInteger = BigInteger.Parse("1234567890123456789123450000");
BigInteger bi2 = myBigInteger & mask;
string str = bi2.ToString("X");
使用按位&
用预先计算的掩码截断数字!然后使用.ToString("X")
以十六进制形式编写它。
请注意,如果您恰好需要83位,则它是10个8位加3位的块...最后3位是0x07而不是0x7F!
请注意,您可以:
string str = bi2.ToString("X21");
将数字填充为21位(可以用83位表示的最大十六进制数)