使用按位运算符组合变量

时间:2012-02-22 23:31:53

标签: c bit-manipulation

我需要一个函数,它将四个unsigned char变量作为参数,并将它们组合成unsigned int。第一个char变量是int的第一个字节,第二个char是第二个字节,依此类推。这是我到目前为止,它没有正常工作,我无法弄清楚为什么搞乱它并谷歌搜索几个小时。

uint32_t combineChar(unsigned char one, unsigned char two, unsigned char three, unsigned char four){

uint32_t com;

com = (uint32_t)one;

com = com << 8 | (uint32_t)two;

com = com << 8 | (uint32_t)three;

com = com << 8 | (uint32_t)four;

return com;       

}

2 个答案:

答案 0 :(得分:0)

您的代码依赖于endianess。第一个字节(uint32_t)在某些系统中是最左边的,在某些系统中是最合适的,所以你可以以与你想要的相反的方式存储字节。

(实际上,如果您只想要uint32_t,那很好。当您将其与char[4]或类似的东西结合时会出现问题

答案 1 :(得分:0)

检查“&lt;&lt;”的优先顺序和“|”运算符。

uint32_t combineChar(unsigned char one, unsigned char two
                    , unsigned char three, unsigned char four){

   return one | (two << 8) | (three << 16) | (four <<24);

}