在base64字符串中存储一定数量的字母需要多少字节

时间:2014-05-10 08:52:15

标签: c++ ascii

存储AAAAA需要多少字节? 我知道一个ASCII字母需要一个字节,但下面的这行代码给了我一个奇怪的答案。

nbytesdecoded = ((ch + 3) / 4) * 3; Where ch is the length of characters, which is five.

上面的代码给了我6个字节。这是对的吗?

代码如下。

int nprbytes;

int nbytesdecoded;

char *s = new char[256]; 
char *bufin = new char[256]; 

cout << "Enter your phrase: ";
cin >> s;


bufin = (char *)s;
int ch = strlen(s);
ch = ch - 1;

nbytesdecoded = ((ch + 3) / 4) * 3;

cout << nbytesdecoded;

2 个答案:

答案 0 :(得分:0)

是的,如果您将AAAAA作为字符串文字。这是因为每个字符串后缀为空终止字符\0,这是一个额外的字节。

要获得5个字节的存储空间,您需要使用字符数组,而不是将其视为字符串

E.g

char ch[5] = {'A', 'A', 'A', 'A', 'A'};

答案 1 :(得分:0)

Base64表示输出文本中的每个字符都对输入数据的6位(64种可能组合)进行编码。假设您的字符串被编码为每个字符一个八位字节,这意味着五个字符需要40位。除以6并向上舍入,我得到7。

BTW:Base64非常普遍,您可以使用现有的任何编程语言实现并自行测试。此外,您误读了代码,因为数字是 nbytesdecoded ,这表明它是解码Base64字符串后的数字,但即便如此,它仍然是错误的。