2016-02-27 129 views
0

我目前正在编写一个简单的程序,通过操纵其位值将字符串转换为base64。字符串二进制转换

如果我使用bitset函数将字符串转换为位值,我该如何操作或存储这些值?

例如,如果我这样做:

std::cout << bitset<8>(cstring[i]) << std::endl; 

我能打印出所有我想要的二进制值。但我希望能够操纵这些值。在操作之前是否必须转换成字符串,还是可以直接操作位。

更具体地说,我想将这些位分组为6个大小的组,并将这些组的值更改为一个int值。任何帮助表示赞赏,谢谢!

回答

0

我会建议您不要使用bitset,而是以旧式方式执行base64转换。取三个输入字节,如unsigned char s,并使用简单的按位移查表将其转换为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字母表。

如果我在这里犯了一个错字 - 你会得到一般想法。您可以查找并计算纸张和铅笔上的实际位移,并以相同的方式实施它们。

+0

是的,这是我第一次直接使用字节。我确实开始想,也许我应该使用操作员来完成这项任务,但我想这可能是另一种方式。感谢您的建议,但我会在这方面得到解决 – calmeishmael

相关问题