我目前正致力于在Eclipse中转换为base64的程序。但是,我刚刚注意到char值似乎有7位而不是通常的8位。例如,字符' o'显示为二进制表示为1101111而不是01101111,这实际上阻止我完成我的项目,因为我需要总共24位才能使转换工作。有没有办法在值的开头加一个0(我试过两个方向的位移,但都没有工作),或完全阻止这个问题?
(不完整/非完整)违规方法的代码如下,如果需要更多,请告诉我:
std::string Encoder::encode( char* src, unsigned char* dest)
{
char ch0 = src[0];
char ch1 = src[1];
char ch2 = src[2];
char sixBit1 = ch0 >> 1;
dest[0] = ch2;
dest[1] = ch1;
dest[2] = ch0;
dest[3] = '-';
}
答案 0 :(得分:0)
char
总是签名 int8。因此,除了只有7个可用位之外 - 因为一个位用于符号存储。
尝试改为使用unsigned char
。
答案 1 :(得分:0)
来自unsigned char
的{{1}}或uint8_t
应该有效。为了获得最大的可移植性,保证<stdint.h>
存在。