-3

私はTCPソケットを扱っています。書き込み機能を使用して、開いているソケットにデータを送信しています。

write(Socket_Fd, "テスト", 4);

それはうまくいきます。でもこうやってやると。

#include <stdio.h>
#include <stdlib.h>

typedef unsigned char BYTE;

typedef struct LANC
{
 BYTE START;
 BYTE END;

} LCODE;


int main(int argc, char *argv[]){

LCODE COMMAND;
COMMAND.START = 0x28;
COMMAND.END = 0x06;

short value = (COMMAND.START << 8) | COMMAND.END;

write(socket_FD, value, sizeof(value);

return 0;
}

値のサイズを確認すると、0x28 と 0x06 を組み合わせたので正しい 2 バイトが得られます。だからprintfをやっている。

printf("%x\n", value);

output is: 2806 which is correct.

printf("%d\n", sizeof(value);

output is: 2 bytes which is correct.

write を使用してオープン ソケットに 16 進数を書き込もうとすると、エラーが発生します。私は何を間違っていますか?

4

1 に答える 1

3

1 行で 2 つの嫌なエラーを犯しています (どのようにコンパイルしますか?)。ポインターが必要な場所に整数(値)を渡してwrite()います(コンパイルされません。コードについてだまそうとしています)。次に、エンディアンに依存することを行っています。つまり、異なるプロセッサでは、「値」の上位バイトがメモリ内で最初に来るか 2 番目に来るかによって、異なる結果が得られます。

解決:

unsigned char value[2] = {COMMAND.START, COMMAND.END};

write(socket_FD, value, sizeof(value));
于 2013-05-09T12:34:10.330 に答える