C下通过socket收发十六进制数据
系统是在LINUX下,下位机发送十六进制数据过来 上位机怎么解析 把数据以十六进制的形式显示出来,发送十六进制又如何实现
------解决方案--------------------
socket不就是发16进制的么
------解决方案--------------------
那你 把buff里的有效数据按照发送的格式转换回去.
------解决方案--------------------
socket发送数据的时候是按位(bit)发送的,和是不是16进制有什么关系,
int a = 0x01;
send(socket_id,&a,sizeof(a));
接收:
int b;
recv(socket_id,&b,sizeof(b));
也许你说的是发送边界的问题,socket发送和接受数据的时候是比特流,如果你使用的是tcp的话,会要求考虑消息边界的问题,涉及解包。
------解决方案--------------------
你怎么发的??
------解决方案--------------------
楼主是不是这个意思: 例如十进制数23,下位机发送的是其十六进制值17,上位机接收到数据后,想要显示成原来的十进制值23?而此时上位机接收到的值直接打印出来,却是ASCII值17?
如果是这个意思就很好办,将收到的数据由十六进制转化成十进制就可以了
char a, b;
b = a / 10 * 16 + a % 10;
------解决方案--------------------
void HexDump(char *buf,int len) {
int i,j,k;
char binstr[80];
for (i=0;i
if (0==(i%16)) {
sprintf(binstr,"%04x -",i);
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
} else if (15==(i%16)) {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
sprintf(binstr,"%s ",binstr);
for (j=i-15;j<=i;j++) {
sprintf(binstr,"%s%c",binstr,('!'
}
printf("%s\n",binstr);
} else {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
}
}
if (0!=(i%16)) {
k=16-(i%16);
for (j=0;j
sprintf(binstr,"%s ",binstr);
}
sprintf(binstr,"%s ",binstr);
k=16-k;
for (j=i-k;j
sprintf(binstr,"%s%c",binstr,('!'
}
printf("%s\n",binstr);
}
}
------解决方案--------------------
引用:就是 下位机发送 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff
然后打印输出是 33221100
77665544
bbaa9988
ffeeddcc
这样的
大小字节序问题。
可以用socket库的
ntohl
htonl
来转。
------解决方案--------------------
一行打印所有数据,什么意思?
另外
printf("recv msg from client: %s\n", buff);
这个%s能把收到的16进制当字符串输出来?0x00打出"00"?
那部分的完整代码贴一下吧
------解决方案--------------------
引用:引用:
引用:
就是 下位机发送 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff
然后打印输出是 33221100
77665544
bbaa9988
ffeeddcc
这样的
大小字节序问题。
可以用socket库的
ntohl
h……
因为你两端的机器对高低位 处理不同。
ntohl和htonl是 机器无关的传送方法
------解决方案--------------------
你recv的length要跟send的相同
------解决方案--------------------
read(clientidone, &buff,sizeof(buff));
接受后ntohl转一下,另外判断下read的返回值,看看是否读取了sizeof(buff)个字节。不然会出问题。
在while前先
printf("recv msg from client: ");
然后while中的printf改成
printf("%x", buff);
不就没换行了
你加了'\n'换行,当然会换行
------解决方案--------------------
send的是buffer中的数据
和什么数制没有关系吧
------解决方案--------------------
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
------解决方案--------------------
char buffer[] = {00, 11, 22, 33, 44, 55, 66 ,77, 88, 99, 00};
int i = 0;
int size = sizefo(buffer)/sizeof(char);
for(i=0;i
{
printf("%X ", buffer[i]);
}
------------