c函数合并字节
c function to merge bytes
我必须在 c 中编写函数来合并来自两个无符号整数参数的字节,
取第二个参数的最高有效字节和第一个参数的其余部分。
例如,如果给定 x = 0x89ABCDEF
和 y = 0x76543210
,那么函数应该 return 0x76ABCDEF
现在我知道 char *c = (char*) &y
会给我 y 的 MSB 但后来我不知道如何在没有他的 MSB 的情况下将它链接到 x 的其余部分。
老实说,我完全忘记了用 C 做这么简单的事情,因为去年我所有的课程都使用 Java,而且我在网上找不到它,所以任何帮助将不胜感激。
这看起来像是位掩码的工作:
unsigned merge(unsigned x, unsigned y)
{
return (y & 0xFF000000) | (x & 0xFFFFFF);
}
假设 32 位值,这使用按位与从 y
中去除除顶部字节之外的所有内容,并仅从 x
中去除顶部字节,然后使用按位或将它们合并在一起.
如果你想支持已知长度的整数字段,使用按位运算符是正确的选择,就像其他人建议的那样。但我会用这种方式使用字符指针回答你的具体问题:
unsigned int result;
char * rPtr = (char*) &result;
char * xPtr = (char*) &x;
*xPtr++;
*rPtr++ = *((char*)&y);
for(i = 1; i < sizeof(result); i++) {
*rPtr++ = *xPtr++;
}
我必须在 c 中编写函数来合并来自两个无符号整数参数的字节, 取第二个参数的最高有效字节和第一个参数的其余部分。
例如,如果给定 x = 0x89ABCDEF
和 y = 0x76543210
,那么函数应该 return 0x76ABCDEF
现在我知道 char *c = (char*) &y
会给我 y 的 MSB 但后来我不知道如何在没有他的 MSB 的情况下将它链接到 x 的其余部分。
老实说,我完全忘记了用 C 做这么简单的事情,因为去年我所有的课程都使用 Java,而且我在网上找不到它,所以任何帮助将不胜感激。
这看起来像是位掩码的工作:
unsigned merge(unsigned x, unsigned y)
{
return (y & 0xFF000000) | (x & 0xFFFFFF);
}
假设 32 位值,这使用按位与从 y
中去除除顶部字节之外的所有内容,并仅从 x
中去除顶部字节,然后使用按位或将它们合并在一起.
如果你想支持已知长度的整数字段,使用按位运算符是正确的选择,就像其他人建议的那样。但我会用这种方式使用字符指针回答你的具体问题:
unsigned int result;
char * rPtr = (char*) &result;
char * xPtr = (char*) &x;
*xPtr++;
*rPtr++ = *((char*)&y);
for(i = 1; i < sizeof(result); i++) {
*rPtr++ = *xPtr++;
}