7

バッファに 512 文字を読み込んでいて、それらを 16 進数で表示したいと考えています。次のアプローチを試しましたが、ネットワーク経由で異なる値を受信する必要があるにもかかわらず、常に同じ値を出力するだけです。

char buffer[512];
bzero(buffer, 512);
n = read(connection_fd,buffer,511);
if (n < 0) printf("ERROR reading from socket");
printf("Here is the message(%d): %x\n\n", sizeof(buffer), buffer);

ここで、バッファ配列の内容ではなくアドレスを出力している可能性はありますか? このタスクを C で簡単に行う方法はありますか?それとも、独自のサブルーチンを作成する必要がありますか?

4

3 に答える 3

16

これは同じ 512 バイトのバッファーを読み取りますが、出力時に各文字を 16 進数に変換します。

char buffer[512];
bzero(buffer, 512);
n = read(connection_fd,buffer,511);
if (n < 0) printf("ERROR reading from socket");

printf("Here is the message:n\n");
for (int i = 0; i < n; i++)
{
    printf("%02X", buffer[i]);
}
于 2012-11-07T17:50:08.070 に答える
2

char を 16 進数で表示するには、正しいフォーマット指定子が必要であり、バッファをループする必要があります。

//where n is bytes back from the read:
printf("Here is the message(size %d): ", n);
for(int i = 0; i<n; i++)
     printf("%x", buffer[i]);

使用していたコードはバッファのアドレスを出力していたため、変更されませんでした。

しばらく時間が経っているので、各バイトを適切にフォーマットしたい場合は、次のフォーマット0xNNも使用できます。%#x

for(int i = 0; i<n; i++)
    printf("%#x ", buffer[i]);

次のようなものを取得するには:

0x10 0x4 0x44 0x52...
于 2012-11-07T17:55:13.710 に答える
0

これは、C の動作とはまったく異なります。どちらかといえば、buffer配列のアドレスを出力しています。

バッファ内の各バイトをループして 16 進数に出力するサブルーチンを作成する必要があります。

そして、本当に人々に助けてもらいたいのであれば、いくつかの答えを受け入れ始めることをお勧めします.

于 2012-11-07T17:51:02.220 に答える