(进制转换)虚心求教:如何将16进制string转换为bitset类型?

时间:2021-08-04 08:59:50


typedef bitset<8> byte;

// 16进制字串
string strHex = "cbd59127f3f5298f709606a626b90d65";


请问如何将变量 strHex转换为形式:

byte plain[16] = { 0xcb, 0xd5, 0x91, 0x27,
  0xf3, 0xf5, 0x29, 0x8f,
  0x70, 0x96, 0x06, 0xa6,
  0x26, 0xb9, 0x0d, 0x65 };

各位大神们,虚心求教!!! (进制转换)虚心求教:如何将16进制string转换为bitset类型?

4 个解决方案

#1


用 sscanf

#2


曾经也有人问过类似的问题 其实有些东西并不是知道用哪个api就认为可以了,那样你将永远只能处于问问题的阶段。
 而不是自己去解决,你要了解的是问题本质。

但是我想告诉你的是 对于数据类型的转换 其实就是俩种结构在计算机中底层的存储问题。
"cbd59127f3f5298f709606a626b90d65"; ->ASCII存储。
typedef bitset<8> byte;->字节存储

1.本质的转换原理。
 ASCII '21' 是如何转换成二进制存储的 字符串2高四位0010  字符串1底四位0001
那么0~F代表的就是0000到1111  

2.空间换时间的实现
一个字节最大表示的数是255
那么构造一个表<string,int> map {‘00‘,0} {'01',1}...{'ff',255} 那么你转换的时间复杂度就是O(n)

无论计算机中采用哪种实现 无外乎就这俩种。

#3



#include <cstdio>
#include <bitset>
#include <vector>

using namespace std;

typedef bitset<8> byte;

int main()
{
    string strHex = "cbd59127f3f5298f709606a626b90d65";
    const char * strs = strHex.c_str();

    byte bsHex[16];
    unsigned long temp;
    for (int i = 0; i < 16; ++i)
    {
        sscanf(strs + 2 * i, "%2x", &temp);
        bsHex[i] = temp;
    }
    
    for (int i = 0; i < 16; ++i)
        printf("%2x %8s\n", bsHex[i].to_ulong(), bsHex[i].to_string().c_str());
    return 0;
}

#1


用 sscanf

#2


曾经也有人问过类似的问题 其实有些东西并不是知道用哪个api就认为可以了,那样你将永远只能处于问问题的阶段。
 而不是自己去解决,你要了解的是问题本质。

但是我想告诉你的是 对于数据类型的转换 其实就是俩种结构在计算机中底层的存储问题。
"cbd59127f3f5298f709606a626b90d65"; ->ASCII存储。
typedef bitset<8> byte;->字节存储

1.本质的转换原理。
 ASCII '21' 是如何转换成二进制存储的 字符串2高四位0010  字符串1底四位0001
那么0~F代表的就是0000到1111  

2.空间换时间的实现
一个字节最大表示的数是255
那么构造一个表<string,int> map {‘00‘,0} {'01',1}...{'ff',255} 那么你转换的时间复杂度就是O(n)

无论计算机中采用哪种实现 无外乎就这俩种。

#3



#include <cstdio>
#include <bitset>
#include <vector>

using namespace std;

typedef bitset<8> byte;

int main()
{
    string strHex = "cbd59127f3f5298f709606a626b90d65";
    const char * strs = strHex.c_str();

    byte bsHex[16];
    unsigned long temp;
    for (int i = 0; i < 16; ++i)
    {
        sscanf(strs + 2 * i, "%2x", &temp);
        bsHex[i] = temp;
    }
    
    for (int i = 0; i < 16; ++i)
        printf("%2x %8s\n", bsHex[i].to_ulong(), bsHex[i].to_string().c_str());
    return 0;
}

#4