1

私がこの番号を持っているとしましょう

int x = 65535;

次の 10 進表現はどれですか。

ÿÿ

単一の文字からそれを行う方法を知っています

#include <stdio.h>

int main() {
    int f = 65535;
    printf("%c", f);
}

しかし、これは私に「ÿ」しか与えません

外部ライブラリを使用せずに、できれば C 型の文字列を使用してこれを行いたいと思います。

4

4 に答える 4

2
#include <stdio.h>

int main() {
    unsigned f = 65535; // initial value

    // this will do the printf and ff >>= 8 until f <= 0 ( =0 actually)
    do {
      printf("%c", f & 0xff); // print once char. The &0xff keeps only the bits for one byte (8 bits)
      f >>= 8; // shifts f right side for 8 bits
    } while (f > 0);
}

値65535、または16進数の0xffffについて考えてみます。これは、その正の値が0xffと0xffの2バイトを使用することを意味します。

  • の印刷はf & 0xff8LSbのみを保持します(0xffff&0xff = 0xff)
  • f >> = 8値を8ビット右にシフトすると、0xffffは0x00ffになります(「ff」の右側はなくなります)
  • f > 0f == 0xff今から本当です

次のループは同じですが、f >>= 80x00ffを右にシフト=> 0x0000、fはnullです。したがって、f > 0条件が間違っており、ループが終了します。

于 2013-01-23T09:21:54.653 に答える
2

あなたが探しているのはビットマスキングです:(x >> 8) & 0xFF上位バイトと(x & 0xFF)下位バイト用です。(実際には、 int32ビットの場合は上位(x >> 24) & 0xFFバイト用です。ただし、値と期待どおりのことを考えると、上位バイトではなく2番目のバイトが必要になる可能性があります。)

于 2013-01-23T09:22:20.627 に答える
1

何かのようなもの

char buffer[9];
long value = 65535;
char *cur = buffer;
while (value > 0)
{
    *cur++ = value % 0x100;
    value /= 0x100;
}
*cur = 0;
于 2013-01-23T09:23:19.783 に答える
1

あなたが持っているのは、16 ビット (2 バイト) の符号なしの数値です。Acharは 8 ビット (1 バイト) です。これは、数値の 2 バイトを抽出して別の文字として取得する必要があることを意味します。

これは、ビット単位の演算子で行われます。それを達成するために、ビット単位&およびビット単位シフトを使用できます。>>

于 2013-01-23T09:23:05.620 に答える