#include <iostream>
int main()
{
char a = 0x05, b = 0x00,c=0xA1,d=0x04;
unsigned int res = a<<24|b<<16|c<<8|d;
std::cout << res<<std::endl;
}
char ... c=0xA1
unsigned char
, иначе после знакового расширения получишь гарантированно отрицательный результатКак склеить байты правильно?