存储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;
答案 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字符串后的数字,但即便如此,它仍然是错误的。