c函数合并字节

c function to merge bytes

我必须在 c 中编写函数来合并来自两个无符号整数参数的字节, 取第二个参数的最高有效字节和第一个参数的其余部分。

例如,如果给定 x = 0x89ABCDEFy = 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++;
}