无论我做什么,Char 似乎都是一个整数,不确定发生了什么
Char seems to be an int no matter what I do, not sure what is happening
这是我的代码,我正在尝试使用结构创建位字段并首先对它们进行排序:
struct rhmp{
unsigned int type1:4;
unsigned int dstPort:14;
unsigned int srcPort:14;
};
struct rhmp rhmp1;
rhmp1.type1 = 3;
rhmp1.dstPort = 122;
rhmp1.srcPort = 300;
char firstByte = (((char)rhmp1.type1 & 0xF) << 4) + (((char)rhmp1.dstPort & 0x3C00)>>10);
char secondByte = (rhmp1.dstPort & 0x3FC) >> 2;
char thirdByte = ((rhmp1.dstPort & 0x3) << 6) + ((rhmp1.srcPort & 0x3F00)>>8);
//char thirdByte = 0x81;
char fourthByte = (rhmp1.srcPort & 0xFF);
char messageToSend[4] = {firstByte, secondByte, thirdByte, fourthByte};
printf("RHMP byte 1: %X\n",firstByte);
printf("RHMP byte 2: %X\n",(int)secondByte);
printf("RHMP byte 3: %X\n",(int)thirdByte);
printf("RHMP byte 3 should be: %X\n",(int) ((rhmp1.dstPort & 0x3) << 6) + ((rhmp1.srcPort & 0x3F00)>>8));
printf("RHMP byte 4: %X\n",(int)fourthByte);`
打印出以下内容:
RHMP byte 1: 30
RHMP byte 2: 1E
RHMP byte 3: FFFFFF81
RHMP byte 3 should be: 81
RHMP byte 4: 2C
无论我做什么,字节 3 似乎都是 32 位值。即使我将它分配给 0x81,它也不起作用。这里发生了什么?
不合格的 char
是您系统上的签名类型——它因实现而异——并且不合格的 int
总是指 signed int
.
thirdByte
的值为 -127。当您将其转换为 signed int
时,它会生成具有相同值 (-127) 的 signed int
。
您可以使用 unsigned char
而不是 char
来解决您的问题。
这是我的代码,我正在尝试使用结构创建位字段并首先对它们进行排序:
struct rhmp{
unsigned int type1:4;
unsigned int dstPort:14;
unsigned int srcPort:14;
};
struct rhmp rhmp1;
rhmp1.type1 = 3;
rhmp1.dstPort = 122;
rhmp1.srcPort = 300;
char firstByte = (((char)rhmp1.type1 & 0xF) << 4) + (((char)rhmp1.dstPort & 0x3C00)>>10);
char secondByte = (rhmp1.dstPort & 0x3FC) >> 2;
char thirdByte = ((rhmp1.dstPort & 0x3) << 6) + ((rhmp1.srcPort & 0x3F00)>>8);
//char thirdByte = 0x81;
char fourthByte = (rhmp1.srcPort & 0xFF);
char messageToSend[4] = {firstByte, secondByte, thirdByte, fourthByte};
printf("RHMP byte 1: %X\n",firstByte);
printf("RHMP byte 2: %X\n",(int)secondByte);
printf("RHMP byte 3: %X\n",(int)thirdByte);
printf("RHMP byte 3 should be: %X\n",(int) ((rhmp1.dstPort & 0x3) << 6) + ((rhmp1.srcPort & 0x3F00)>>8));
printf("RHMP byte 4: %X\n",(int)fourthByte);`
打印出以下内容:
RHMP byte 1: 30
RHMP byte 2: 1E
RHMP byte 3: FFFFFF81
RHMP byte 3 should be: 81
RHMP byte 4: 2C
无论我做什么,字节 3 似乎都是 32 位值。即使我将它分配给 0x81,它也不起作用。这里发生了什么?
不合格的 char
是您系统上的签名类型——它因实现而异——并且不合格的 int
总是指 signed int
.
thirdByte
的值为 -127。当您将其转换为 signed int
时,它会生成具有相同值 (-127) 的 signed int
。
您可以使用 unsigned char
而不是 char
来解决您的问题。