我正在使用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将十六进制写入打开的套接字时,我收到错误。我做错了什么?
答案 0 :(得分:3)
你在一行中犯了两个令人作呕的错误(它甚至如何编译?)。你将一个整数(值)传递给write()
,它需要一个指针(不会编译,你试图欺骗我们你的代码)。其次,你正在做一些依赖于字节序的东西,也就是说,在不同的处理器上你会得到不同的结果,这取决于“值”的高字节在内存中是第一位还是第二位。
解决方案:
unsigned char value[2] = {COMMAND.START, COMMAND.END};
write(socket_FD, value, sizeof(value));