我有一个十六进制格式的32字节整数,例如:
0xAB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12 34 AB CD 12
34 AB CD 12 34
如何将其显示为基数2表示法?我不完全了解如何以给定的格式实现int。
答案 0 :(得分:0)
取十六进制数的每个数字,并使用哈希表将其转换为二进制(base-2)数,即A将变为1010b。二进制数应该在左边添加零,这样它就是4个字符,即它应该是“11”,不是“0011”。你可以使用一个数组,但你必须取字符的序数,如果它等于或低于57,则减去48(这样“9”,或57将成为整数9)。同样,较低的值将成为相应的整数。但是“A”是序数65,所以如果序数大于或等于65,则减去50,使“A”变为整数10.你的数组将是"0000", "0001", "0010", "0011", "100", ...
,所以当任何整数是索引后,将返回相应的二进制(base-2)表示。
答案 1 :(得分:0)
这是C ++,但它应该给你这个想法。
unsigned char bytes[32] = { 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34, 0xAB, 0xCD, 0x12, 0x34 };
for (int i = 0; i < 32; i++)
{
unsigned char byte = bytes[i];
for (int j = 0; j < 8; j++)
{
printf("%u", (byte & 0x80) >> 7);
byte <<= 1;
}
}
答案 2 :(得分:0)
我认为你只需要知道如何将十六进制转换为二进制。
如果您使用的是Windows(7),只需打开计算器,将视图设置为编程器,选择“Hex”,输入您的号码,然后选择“bin” - 或者只是观看显示更新。
如果您使用的是* ix,请运行bc
,然后输入ibase=16
,obase=2
,然后输入您的号码并按Enter键。
一般来说, 真的 应该知道十六进制和二进制是什么意思。如果你不能将0到15的基本值从一个转换为另一个,你就错过了成为程序员的最核心部分。理解这一点非常重要。二进制 - 几乎所有数字逻辑都基于的数字系统 - 仅由0和1组成。 Hex实际上只是二进制的简写。您可以存储base16,而不是存储base2。由于16 = 2 ^ 4,您可以将4位压缩为一个十六进制代码。
0x0 = 0000 = 0
0x1 = 0001 = 1
0x2 = 0010 = 2
0x3 = 0011 = 3
0x4 = 0100 = 4
0x5 = 0101 = 5
0x6 = 0110 = 6
0x7 = 0111 = 7
0x8 = 1000 = 8
0x9 = 1001 = 9
0xA = 1010 = 10
0xB = 1011 = 11
0xC = 1100 = 12
0xD = 1101 = 13
0xE = 1110 = 14
0xF = 1111 = 15