7

こんにちは、digi dynamic c を使用しています。これを文字列に変換しようとしています

char readingreg[4];
readingreg[0] = 4a;
readingreg[1] = aa;
readingreg[2] = aa;
readingreg[3] = a0;

現在、printfステートメントを実行するときは、次のようにする必要があります。

printf("This is element 0: %x\n", readingreg[0]);

しかし、これを文字列にしたいので、このprintfようなステートメントを使用できます

  printf("This is element 0: %s\n", readingreg[0]);

私は本質的に、文字列として持つ必要がある TCP/IP ポートを介して readreg 配列を送信しています。それを文字列に変換できないようです。ご協力いただきありがとうございます。また、配列全体ではなく各要素を一度に行う方法を誰かが教えてくれれば、要素は4つしかないので問題ありません。

4

2 に答える 2

9

0xaaプレーンcharが署名されている場合はオーバーフローします。次を使用しますunsigned char

#include <stdio.h>

int main(void)
{
    unsigned char readingreg[4];
    readingreg[0] = 0x4a;
    readingreg[1] = 0xaa;
    readingreg[2] = 0xaa;
    readingreg[3] = 0xa0;
    char temp[4];

    sprintf(temp, "%x", readingreg[0]);
    printf("This is element 0: %s\n", temp);
    return 0;
}
于 2014-09-02T19:56:08.807 に答える
2

マシンがビッグ エンディアンの場合は、次の操作を実行できます。

char str[9];

sprintf(str, "%x", *(uint32_t *)readingreg);

マシンがリトル エンディアンの場合、バイト オーダーを入れ替える必要があります。

char str[9];
uint32_t host;

host = htonl(*(uint32_t *)readingreg);
sprintf(str, "%x", host);

移植性が問題になる場合は、エンディアンに関係なく、方法 2 を使用する必要があります。

次の出力が得られます。

printf("0x%s\n", str);

0x4aaaaaa0

于 2014-09-02T19:53:39.937 に答える