在c中发送十六进制值并检查其位集

在c中发送十六进制值并检查其位集,c,linux,sockets,hex,C,Linux,Sockets,Hex,我正在Linux中进行套接字编程。客户端正在发送以下给定的十六进制值。我必须在服务器端接收这些值,并检查设置了哪些位的8、9、10和11个十六进制值。。 我正在使用下面的代码,但它正在打印一些奇怪的输出。 请帮我做这个 客户: void infostate(int sockfd,int confd) { char responsedata[]={0x7E,0x11,0x01,0xD0,0x00,0x4E,0x2F,0x0F,0x0F,0x70,0xFF,0xF5,0x25,0xF3,0x0D};

我正在Linux中进行套接字编程。客户端正在发送以下给定的十六进制值。我必须在服务器端接收这些值,并检查设置了哪些位的8、9、10和11个十六进制值。。 我正在使用下面的代码,但它正在打印一些奇怪的输出。 请帮我做这个

客户:

void infostate(int sockfd,int confd)
{
char responsedata[]={0x7E,0x11,0x01,0xD0,0x00,0x4E,0x2F,0x0F,0x0F,0x70,0xFF,0xF5,0x25,0xF3,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");
}
void信息状态(int-sockfd,int-confd)
{
字符响应数据[]={0x7E、0x11、0x01、0xD0、0x00、0x4E、0x2F、0x0F、0x0F、0x70、0xFF、0xF5、0x25、0xF3、0x0D};
int rc;
rc=send(sockfd,responsedata,sizeof(responsedata),0);

如果(rc请尝试此函数,而不是
processinfostate
函数

void processinfostate(char responsedata[])
{   
 char  z[8];int i, j;
 int indexToCheck[4] = {8, 9, 10, 11};
 unsigned char x;

 for(i=0;i<4;i++)
 {
    x=responsedata[indexToCheck[i]];
    printf(" %x ",x);  
    for (j = 0; j < 8; j++)
    {  
        z[i] = ((x >> j) & 0x1);
        printf(" %x ",z[i]);  
    }
    printf("\n");
 }

} 
void processinfostate(字符响应数据[])
{   
char z[8];int i,j;
int indexToCheck[4]={8,9,10,11};
无符号字符x;
对于(i=0;i>j)&0x1);
printf(“%x”,z[i]);
}
printf(“\n”);
}
} 

这段代码甚至不会编译。它会产生什么样的“奇怪输出”呢?为什么要以字符形式发送数据?您可以将其作为短消息或长消息发送,从而节省带宽。也使数据的使用更容易。你能用一个例子“检查8、9、10和11位的十六进制值设置”来解释这个req吗?在前面的代码中有一些错误,所以我编辑了代码。
void processinfostate(char responsedata[])
{   
 char  z[8];int i, j;
 int indexToCheck[4] = {8, 9, 10, 11};
 unsigned char x;

 for(i=0;i<4;i++)
 {
    x=responsedata[indexToCheck[i]];
    printf(" %x ",x);  
    for (j = 0; j < 8; j++)
    {  
        z[i] = ((x >> j) & 0x1);
        printf(" %x ",z[i]);  
    }
    printf("\n");
 }

}