我正在处理一个套接字应用程序,其中客户端正在发送包含十六进制值的数据包。我想要做的是组合数据包发送的2个十六进制值,除以1000并将结果打印为浮点值。 / p>
假设客户端发送的数据为0x24,0x00,十进制为36和00,我的服务器将这些值存储在char rdata [2]中。我必须将这两个十六进制值组合成3600并将其除以1000以打印结果为3.600。 我只需要c代码的帮助来打印上面的结果,而不是用于接收数据和所有数据。 感谢你。 我只是提供了一小部分代码,因为ehole应用程序超过1000行
Client
void analogdata(int sockfd,int confd)
{
char responsedata[]=[0x7E,0x11,0x01,0xD0,0x00,0xE0,0x02,0x24,0x00,0x0B,0x00,0x44,0x0C,0x34,0x00,0x32,0x00,0x14,0x00,0x32,0x0C,0x22,0x86,0x32,0x00,0x62,0x02,0x4D,0x02,0x0D];
int rc;
rc=send(sockfd,responsedata,sizeof(responsedata),0);
if(rc<0)
{
perror("error in sending\n");
close(confd);
close(sockfd);
exit(-1);
}
else
printf("data successfully send\n");
}
Server
void identifycmd(char command[],int acceptsd,int sd)
{
int rc,i;
if(command[11]=='8' && command[12]=='2')
{
char responsedata[30];
rc=recv(acceptsd,responsedata,sizeof(responsedata),0);
if(rc<0)
{
perror("error in recieving\n");
close(acceptsd);
close(sd);
exit(-1);
}
checkretval(responsedata);
processanalogdata(responsedata);
}
if(command[11]=='8' && command[12]=='3')
{
char responsedata[31];
rc=recv(acceptsd,responsedata,sizeof(responsedata),0);
if(rc<0)
{
perror("error in recieving\n");
close(acceptsd);
close(sd);
exit(-1);
}
checkretval(responsedata);
processinfostate(responsedata);
}
}
void processanalogdata(char responsedata[])
{
printf("response data is \n");
puts(responsedata);
printf("\n");
printf("*****Battery Analog Data*****\n");
printf("\n");
printf("Max cell voltage is %.1f%d volt\n",(responedata[7]/10.0),responsedata[8]);
}
答案 0 :(得分:0)
没有任何进一步的信息我 会尝试这样的事情。
char *rdata[2] = {"0x24", "0x00"};
int a = 0;
int b = 0;
sscanf(rdata[0],"%x",&a);
sscanf(rdata[1],"%x",&b);
char *tmp = malloc(sizeof(char)*4);
sprintf(tmp,"%02i%02i",a,b);
printf("%s \n",tmp);
int value = atoi(tmp);
printf("Result = %3.3f\n",value/1000.f);