我正在为我的班级学习C语言。我需要知道的一件事是给出一个数组,我必须从两个字符中获取信息并将其存储在一个字节中。例如。如果字符串是“A1B3C5”,那么我必须在较高的3位中存储A = 001,然后在较低的5位中存储1。我必须运行,一次可以从数组中获取两个字符,并在此处打印该函数,
void print2(char string[])
{
int i = 0;
int length = 0;
char char1, char2;
length = strlen(string);
for ( i = 0; i <length; i= i + 2)
{
char1 = string[i];
char2 = string[i+1];
printf("%c, %c\n", char1, char2);
}
}
但现在我不知道如何对其进行编码然后再次解码。有人可以帮帮我吗?
答案 0 :(得分:2)
假设有一个ASCII字符集,从字母中减去'@'并向左移五位,然后从表示该数字的字符中减去'0'并将其添加到第一部分。
答案 1 :(得分:2)
所以你有一个字节,你想要以下位布局:
76543210
AAABBBBB
要存储A
,您可以:
unsigned char result;
int input_a = somevalue;
result &= 0x1F; // Clear the upper 3 bits.
// Store "A": make sure only the lower 3 bits of input_a are used,
// Then shift it by 5 positions. Finally, store it by OR'ing.
result |= (char)((input_a & 7) << 5);
阅读:
// Simply shift the byte by five positions.
int output_a = (result >> 5);
要存储B
,您可以:
int input_b = yetanothervalue;
result &= 0xE0; // Clear the lower 5 bits.
// Store "B": make sure only the lower 5 bits of input_b are used,
// then store them by OR'ing.
result |= (char)(input_b & 0x1F);
阅读:
// Simply get the lower 5 bits.
int output_b = (result & 0x1F);
您可能想要了解布尔运算AND和OR,位移以及最后位掩码。
答案 2 :(得分:1)
首先,一位只能代表两种状态:0和1,或者TRUE和FALSE。你的意思是一个字节,它由8位组成,因此可以代表2 ^ 8个状态。
两个在一个字节中放置两个值,使用逻辑OR(|
)和按位移位(<<
和>>
)。
我不会在这里发布代码,因为你应该学习这些东西 - 了解哪些位和字节以及如何使用它们非常重要。但如果您不清楚某些事情,请随时提出跟进问题。