【发布时间】:2018-08-26 19:03:27
【问题描述】:
我无法从 32 位长整数中提取特定位并将这些特定位保存到字符串中。
为了更好地解释我的问题,我会这样解释:
好的,假设我有这个整数:
01010101010101010101000011010100
我想从第 2(包含)到第 21 位(包含)提取(从 MSB 到 LSB)。
所以我可以简单地创建一个掩码,只保留我想要的 20 位并将所有其他位归零。
Integer: 01010101010101010101000011010100
Mask: 01111111111111111111100000000000
New integer = Integer & Mask = 01010101010101010101000000000000
在那之后,我不知道如何将这 20 位保存到一个字符串中。
好的,现在假设我们有一个可以容纳 100 个字符的 char 数组。
然后我需要将这 20 位从整数复制到 char 数组中,以便只有这 20 位显示为文本。应该是这样的:
printf("Text: %s", string); -> "Text: 10101010101010101010"
我希望我解释得足够好。如果您仍有疑问,请告诉我。
【问题讨论】:
-
请不要从左数位。
0th位是我们通常写的最右边的位,最不重要。所以你的掩码01111111111111111111100000000000是第 11 位到第 30 位。至于问题,你可以通过逐位移动将其转换为字符串。我敢肯定有一个类似的问题。 -
是否有任何理由将其保存为 ASCII 二进制字符串?为什么不将其保存为二进制并编写一个函数将其打印为 ASCII 二进制字符串?这样一来,
Integer & Mask就很简单了。