字符串二进制转换
String Binary conversion
我目前正在编写一个简单的程序,通过操作其位值将字符串转换为 base64。
如果我使用 bitset 函数将字符串转换为其位值,我该如何操作或存储这些值?
例如,如果我这样做:
std::cout << bitset<8>(cstring[i]) << std::endl;
我能够打印出我想要的所有二进制值。但我希望能够操纵这些值。是必须转成字符串才能操作,还是可以直接对bits进行操作
更具体地说,我想将这些位分组为大小为 6 的组,并将这些组的值更改为一个 int 值。感谢任何帮助,谢谢!
我建议您不要使用 bitset
,而是以老式的方式执行到 base64 的转换。将三个输入字节作为 unsigned char
s,并使用简单的位移位和 table 查找将它们转换为 base64。
其实并不复杂。如果
unsigned char a, b, c;
那么你的输入字节是(从内存中执行此操作):
int b1= (a >> 2);
int b2= ((unsigned char)((a & 0x03) << 4)) | (unsigned char)(b >> 4);
int b3= ((unsigned char)((b & 0x0F) << 2)) | (unsigned char)(c >> 6);
int b4= c & 0x3F;
无需使用位集。你说你在写一个简单的程序?好吧,没有比这更简单的了。这是你的四个整数。在最后一步中,使用数组查找将值转换为 base64 字母表。
如果我在这里打错了字——你就明白了。您可以在纸和铅笔上查找并找出实际的位移位,并以相同的方式实现它们。
我目前正在编写一个简单的程序,通过操作其位值将字符串转换为 base64。
如果我使用 bitset 函数将字符串转换为其位值,我该如何操作或存储这些值?
例如,如果我这样做:
std::cout << bitset<8>(cstring[i]) << std::endl;
我能够打印出我想要的所有二进制值。但我希望能够操纵这些值。是必须转成字符串才能操作,还是可以直接对bits进行操作
更具体地说,我想将这些位分组为大小为 6 的组,并将这些组的值更改为一个 int 值。感谢任何帮助,谢谢!
我建议您不要使用 bitset
,而是以老式的方式执行到 base64 的转换。将三个输入字节作为 unsigned char
s,并使用简单的位移位和 table 查找将它们转换为 base64。
其实并不复杂。如果
unsigned char a, b, c;
那么你的输入字节是(从内存中执行此操作):
int b1= (a >> 2);
int b2= ((unsigned char)((a & 0x03) << 4)) | (unsigned char)(b >> 4);
int b3= ((unsigned char)((b & 0x0F) << 2)) | (unsigned char)(c >> 6);
int b4= c & 0x3F;
无需使用位集。你说你在写一个简单的程序?好吧,没有比这更简单的了。这是你的四个整数。在最后一步中,使用数组查找将值转换为 base64 字母表。
如果我在这里打错了字——你就明白了。您可以在纸和铅笔上查找并找出实际的位移位,并以相同的方式实现它们。