处理一个大的数字输入和输出十六进制字符串
Process a large numeric input and output hex string
我需要输入大于 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
我不确定我的想法是解决这个问题的正确方法。任何意见,将不胜感激。
谢谢。
作弊! :-)
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 位表示的最大十六进制数)
我需要输入大于 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
我不确定我的想法是解决这个问题的正确方法。任何意见,将不胜感激。
谢谢。
作弊! :-)
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 位表示的最大十六进制数)