デバッグしようとしているプログラムがありますが、Dynamic C は文字列を通常の C とは異なる方法で処理しているようです (とにかく、文字配列です)。8 ビットの char 変数の内容を表示するために、0 と 1 の 8 文字の長さ (\0 を含めると 10 文字) の文字列を作成するために作成した関数があります。(IE、13 という数字を指定すると、文字列 "0001101\0" が返されます)
以下のコードを使用すると、!{happy face] が 6 回出力され (まあ、2 回目は何らかの理由で幸せそうな顔だけです)、それぞれの戻り値は 0xDEAE または "!\x02.
逆参照して適切な文字列を返すと思っていましたが、ポインターを送信して解析しようとしているだけのようです。これはばかげているように思えるかもしれませんが、私の経験は実際には C++ と Java であったため、C に戻ると、後のプログラミング言語で対処されたいくつかの問題が発生し、対処方法が完全にはわかりません (文字列の欠如など)変数)。
このコードをどのように修正できますか、または私がやろうとしていることを行うためのより良い方法はどうすればよいでしょうか (おそらく文字配列へのポインターを送信して関数からそれを処理することができると思いましたが、質問する必要があると思いました)車輪の再発明を試みているだけかどうかを確認するため)。
現在、私は次のように設定しています:
これは main() からの抜粋です
display[0] = '\0';
for(i=0;i<6;i++)
{
sprintf(s, "%s ", *char_to_bits(buffer[i]));
strcat(display, s);
}
DispStr(8,5, display);
そして、これは問題のある機能です:
char *char_to_bits(char x)
{
char bits[16];
strcpy(bits,"00000000\0");
if (x & 0x01)
bits[7]='1';
if (x & 0x02)
bits[6]='1';
if (x & 0x04)
bits[5]='1';
if (x & 0x08)
bits[4]='1';
if (x & 0x10)
bits[3]='1';
if (x & 0x20)
bits[2]='1';
if (x & 0x40)
bits[1]='1';
if (x & 0x80)
bits[0]='1';
return bits;
}
完成させるために、他の関数を使用して stdio ウィンドウの特定の場所に出力します。
void DispStr(int x, int y, char *s)
{
x += 0x20;
y += 0x20;
printf ("\x1B=%c%c%s", x, y, s);
}