在制作用于工作和隔离位和字节的二进制掩码时,从Binary转换为Hex的最快方法是什么?

时间:2013-08-26 14:02:26

标签: c binary bitmask

假设我有以下二进制字符串:

110110010110

我只需要第4位和第6位,我们学会了使用这样的面具

000000111000

因此,使用二进制&操作,我将得到我想要的位,而我剩下要做的就是将它们移到右边。

由于C不能使用普通的二进制数,我们被告知最简单的方法是将二进制掩码字符串转换为十六进制数。我的讲师使用超快速方法将二进制字符串转换为十六进制数字。

创建这些面具的最简单,最正确的方法是什么?

3 个答案:

答案 0 :(得分:7)

每组四位对应一个十六进制“数字”。学习那些,然后开始从右到左转换四个块。 (如果您要转换的位数不是四位的倍数,那么只需在左端添加零,直到它进行最后一次转换。)

<00> 0000:0x0
0001:0x1
0010:0x2
0011:0x3
0100:0x4
0101:0x5
0110:0x6
0111:0x7
1000:0x8
1001:0x9
1010:0xA
1011:0xB
1100:0xC
1101:0xD
1110:0xE
1111:0xF

答案 1 :(得分:1)

对于字符串到字符串?抓取4位,找到数字(0-15),然后用作表查找的索引。对于面具:

hex_digit = val & 0x0F;

使用以下位移4位

val = val >> 4;

答案 2 :(得分:1)

在我看来,从最后(最低位)开始将大字符串切成4位的小块是有帮助的。例如,您的二进制数110110010110可以写为1101 1001 0110。如果您的号码无法正确地分成四位,例如1000011010,则应将其写为10 0001 1010

现在,它更加简单。在十六进制表示法中,0为0,f为15.您从零开始计数,但现在使用16而不是使用10个符号。因此它变为0,1,2,3,4 ,5,6,7,8,9,a,b,c,d,e,f。

您可以用十六进制符号替换每组位!在您的示例中(例如1101 1001 0110),它将是d96,而在我的示例中(即10 0001 1010),它将是21a。对于您在二进制字符串中找到的每一个,您都会在结果中添加2 ^ (position - 1),其中position = 1表示最低有效位。例如,在0110中,您在位置2(即2 ^ (2 - 1) = 2 ^ 1 = 2)和位置3(即2 ^ (3 - 1) = 2 ^ 2 = 4)中有1,因此它是2 + 4 = 6。现在,只需预先设置0x告诉编译器后面的内容是十六进制数,它变为0xd96

在任何情况下,写一个数字都意味着它是十进制表示法,前面加0表示它是八进制,前面加0x表明它是十六进制。

我希望这有帮助! :d