1

Cプログラミングで9文字を4つのunsigned shortの配列に入れる方法を理解するのに苦労しています。

char が 1 バイトであることはわかっていますが、ASCII テーブルが 0 ~ 127 であるため 7 ビットしか使用されないため、7 * 9 = 63 ビットが必要です。short はそれぞれ 2 バイトなので、short ごとに 16 ビットあります。4 つの short の配列は 4 * 16 = 64 ビットです。つまり、これらの 9 文字を 4 つの unsigned short の配列に収めることができます

だから基本的に私は持っています

unsigned short *ptr, theArray[4], 文字 = 0;

int マスク;

// 9文字を読み込んで配列に保存

私が理解していないのは、4文字の入力を読み取って配列に保存する方法です。制限は、最初にそれらを文字列に入れることができないことです.int以外のものを宣言することはできません. ビット操作を行う必要があることはわかっていますが、入力の読み取り方法がわかりません。ご協力ありがとうございました!

4

2 に答える 2

0

unsigned short = 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;
}
于 2013-08-13T08:51:02.023 に答える
0

ここで、shift および or 演算子の出番です。

正確な例を挙げることはできませんが、それらを一緒に使用して、文字を unsigned short の配列に「粉砕」することができます。

簡単な例は、おそらく探しているものとは異なりますが、次のようになります。

char j = 'J';
char y = 'Y';
unsigned short s = ( y << 7 ) | j;
于 2013-04-18T20:23:36.893 に答える