我在C程序的/ tmp / mypipe中创建了一个管道。管道用于在程序中的两个模块上发送和接收命令字节。模块发送以下结构中指定的数据:
struct controller
{
int command;
char data[100];
}
我想以相同的格式将数据发送到/ tmp / mypipe。我尝试了下面的命令,C程序接收数据。
echo -e "\x00\x00\x00\x04"www.google.com > /tmp/mypipe
但是,程序收到的数据格式如下:
control.command = 67108864
control.data = www.google.com
我想要的是control.command仅以4号收到。我尝试了多个通过谷歌找到的建议。但是,当我尝试将数据重定向到管道时,它会失败。
非常感谢任何帮助。
答案 0 :(得分:4)
您最有可能使用小端机,因此您应该以小端显示数字
echo -e "\x04\x00\x00\x00"www.google.com > /tmp/mypipe
或者,最好在界面的合同中选择一个字节顺序,并确保将其转换为代码中机器的字节顺序
NAME
htonl, htons, ntohl, ntohs - convert values between host and network byte order
SYNOPSIS
#include <netinet/in.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
说明
htonl()函数转换无符号整数 hostlong从主机字节顺序到网络字节顺序。
htons()函数转换无符号短整数hostshort 从主机字节顺序到网络字节顺序。
ntohl()函数从中转换无符号整数netlong 网络字节顺序为主机字节顺序。
ntohs()函数转换无符号短整数netshort 网络字节顺序为主机字节顺序。
在i80x86上,主机字节顺序首先是最低有效字节, 而在因特网上使用的网络字节顺序是Most 重要的字节首先。
答案 1 :(得分:1)
这是一个大/小端的问题。
在您的系统上,您应该使用:
echo -e "\x04\x00\x00\x00"www.google.com > /tmp/mypipe