-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;
}

当我检查值的大小时,我得到了 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 将十六进制写入打开的套接字时出现错误。我究竟做错了什么?

4

1 回答 1

3

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

解决方案:

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

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