我无法弄清楚如何将9个字符串放入c编程中的4个无符号短数组中。
我知道char是1个字节,但只使用了7位,因为ascii表是0~127,所以我需要7 * 9 = 63位。因为short是每个2字节,所以每个short有16位。 4个短的数组是4 * 16 = 64位。这意味着我可以将这9个字符组合成4个无符号短字符
的数组基本上我有
unsigned short * ptr,theArray [4],letter = 0;
int mask;
//读取9个字符并将其保存到数组
我不明白的是如何读取4个字符输入并将其保存到阵列。限制是我不能先把它们放到一个字符串中,除了int之外我不能声明其他任何东西。我知道我必须做一些操作,但我只是不知道如何读取输入。谢谢你的帮助!
答案 0 :(得分:0)
这是班次和/或操作员发挥作用的地方。
我不能给出任何确切的例子,但是你可以将它们一起用来“粉碎”一个无符号短裤阵列。
一个简单的例子,可能不完全是你想要的,将是:
char j = 'J';
char y = 'Y';
unsigned short s = ( y << 7 ) | j;
答案 1 :(得分:0)
如果我们可以假设无符号短= 16位且char = 8那么 除非我弄错了这个:
#include <stdio.h>
int main()
{
unsigned short *ptr, theArray[4], letter = 0;
int mask;
// theArray:
// |<-------0------>|<-------1------>|<-------2------>|<-------3------>|
// characters:
// 0111111122222223 3333334444444555 5555666666677777 7788888889999999
// Because we use |= first clear the whole thing
theArray[0] = theArray[1] = theArray[2] = theArray[3] = 0;
/* char 1 */ letter=getchar();
theArray[0] |= 0x7F00 & (letter << 8);
/* char 2 */ letter=getchar();
theArray[0] |= 0x00FE & (letter << 1);
/* char 3 */ letter=getchar();
theArray[0] |= 0x0001 & (letter >> 6);
theArray[1] |= 0xFC00 & (letter << 10);
/* char 4 */ letter=getchar();
theArray[1] |= 0x03F8 & (letter << 3);
/* char 5 */ letter=getchar();
theArray[1] |= 0x0007 & (letter >> 4);
theArray[2] |= 0xF000 & (letter << 12);
/* char 6 */ letter=getchar();
theArray[2] |= 0x0FE0 & (letter << 5);
/* char 7 */ letter=getchar();
theArray[2] |= 0x001F & (letter >> 2);
theArray[3] |= 0xC000 & (letter << 14);
/* char 8 */ letter=getchar();
theArray[3] |= 0x3F80 & (letter << 7);
/* char 9 */ letter=getchar();
theArray[3] |= 0x007F & letter;
return 0;
}