C write()函数发送2个字节的十六进制

时间:2013-05-09 12:25:38

标签: c linux

我正在使用TCP套接字。我正在使用write函数将数据发送到打开的套接字。

写(Socket_Fd,“test”,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;
}

当我检查值的大小时,我得到2个字节,这是正确的,因为我组合了0x28和0x06。所以做一个printf。

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

output is: 2806 which is correct.

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

output is: 2 bytes which is correct.

当我尝试使用write将十六进制写入打开的套接字时,我收到错误。我做错了什么?

1 个答案:

答案 0 :(得分:3)

你在一行中犯了两个令人作呕的错误(它甚至如何编译?)。你将一个整数(值)传递给write(),它需要一个指针(不会编译,你试图欺骗我们你的代码)。其次,你正在做一些依赖于字节序的东西,也就是说,在不同的处理器上你会得到不同的结果,这取决于“值”的高字节在内存中是第一位还是第二位。

解决方案:

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

write(socket_FD, value, sizeof(value));