接收串口十六进制数据并以十六进制显示

leesong2009 2012-02-27 03:36:04
/*server.c*/
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

main(){
int sock;
struct sockaddr_in server,client;
int recvd,snd;
int structlength;
char * server_ip = "192.168.1.111";/*server ip address*/
int port = 8080;
char recvbuf[2000],sendbuf[2000];
char str1[]="I have received! \n";
memset((char *)&server,0,sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(server_ip);
server.sin_port = htons(port);
memset((char *)&client,0,sizeof(client));
client.sin_family = AF_INET;
client.sin_addr.s_addr = htonl(INADDR_ANY);
client.sin_port = htons(port);

if((sock = socket (AF_INET,SOCK_DGRAM,0)) < 0 ){
printf("socket create error!\n");
exit(1);
}
structlength = sizeof(server);
if( bind(sock,(struct sockaddr *) &server,structlength) < 0){
printf("socket bind error!\n");
perror("bind");
exit(1);
}
while(1){
structlength = sizeof(client);

printf("waiting.......\n");
recvd = recvfrom(sock,recvbuf,sizeof(recvbuf),0,
(struct sockaddr *) & client,&structlength);
if(recvd < 0){
perror("recvfrom");
exit(EXIT_FAILURE);
}
else{

printf("received:%s\n",recvbuf);

memset(sendbuf,0,strlen(sendbuf));
memcpy(sendbuf,str1,strlen(str1));

snd = sendto(sock,sendbuf,strlen(str1),0,
(struct sockaddr *) &client,structlength);
if(snd < 0){
perror("sendto");
exit(1);
}
printf("sendok!\n");
}
}
close(sock);
}
...全文
761 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
leesong2009 2012-03-22
  • 打赏
  • 举报
回复
问题还没有解决,高手救命!
赵4老师 2012-02-28
  • 打赏
  • 举报
回复
void HexDump(char *buf,int len) {
int i,j,k;
char binstr[80];

for (i=0;i<len;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,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
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<k;j++) {
sprintf(binstr,"%s ",binstr);
}
sprintf(binstr,"%s ",binstr);
k=16-k;
for (j=i-k;j<i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
printf("%s\n",binstr);
}
}
leesong2009 2012-02-28
  • 打赏
  • 举报
回复
大虾进来帮忙看看吧.
leesong2009 2012-02-28
  • 打赏
  • 举报
回复
楼上的luciferisnotsatan,非常感谢你!问题是我要如何打印出串口发过来的十六进制数?
printf("received:%s\n",recvbuf);用这一句可以打印出终端的编号,但不显示串口数据.
luciferisnotsatan 2012-02-28
  • 打赏
  • 举报
回复
看看%x代表什么吧
x
int
Unsigned hexadecimal integer, using "abcdef."

X
int
Unsigned hexadecimal integer, using "ABCDEF."

你这不就是打印recvbuf本身的内容么。
leesong2009 2012-02-28
  • 打赏
  • 举报
回复
请高手指点!多谢!
leesong2009 2012-02-27
  • 打赏
  • 举报
回复
这儿有高手么?
leesong2009 2012-02-27
  • 打赏
  • 举报
回复
将这一句改成:printf("received:%x\n",recvbuf);后,为什么接收的内容会相同?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧