【问题标题】:String Binary conversion字符串二进制转换
【发布时间】:2016-02-27 01:38:45
【问题描述】:

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

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

例如,如果我这样做:

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

我能够打印出我想要的所有二进制值。但我希望能够操纵这些值。是不是必须先转换成字符串才能对它进行操作,还是直接对位进行操作。

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

【问题讨论】:

    标签: c++ bitset


    【解决方案1】:

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

    如果我在这里打错字——你就会明白大意。您可以查找并找出纸和铅笔上的实际位移,并以相同的方式实现它们。

    【讨论】:

    • 是的,这是我第一次直接使用字节。我确实开始认为也许我应该使用运算符来完成这项任务,但我在想可能还有另一种方式。不过感谢您的建议,我会解决这个问题
    猜你喜欢
    • 2021-02-24
    • 2022-01-20
    • 1970-01-01
    • 2014-08-02
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多