字符的位数不正确

时间:2017-03-25 02:41:59

标签: c++ eclipse

我目前正致力于在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] = '-';
}

2 个答案:

答案 0 :(得分:0)

对于C / C ++语言,

char总是签名 int8。因此,除了只有7个可用位之外 - 因为一个位用于符号存储。

尝试改为使用unsigned char

答案 1 :(得分:0)

来自unsigned char的{​​{1}}或uint8_t应该有效。为了获得最大的可移植性,保证<stdint.h>存在。