こんにちは私はdigidynamiccを使用しています。これを文字列に変換しようとしています
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]);
基本的に、readingreg配列をTCP/IPポート経由で送信しているので、文字列として送信する必要があります。文字列に変換できないようです。ご協力いただきありがとうございます。また、配列全体ではなく、一度に各要素を実行する方法を誰かに教えてもらえれば、要素は4つしかないので、それで問題ありません。
プレーンなchar
が署名されると0xaa
がオーバーフローします。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;
}
マシンがビッグエンディアンの場合、次のことができます。
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