合并socket发送的十六进制值

时间:2014-01-07 11:20:13

标签: c sockets hex

我正在处理一个套接字应用程序,其中客户端正在发送包含十六进制值的数据包。我想要做的是组合数据包发送的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]);
 }

1 个答案:

答案 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);