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 };
各位大神们,虚心求教!!!
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)
无论计算机中采用哪种实现 无外乎就这俩种。
而不是自己去解决,你要了解的是问题本质。
但是我想告诉你的是 对于数据类型的转换 其实就是俩种结构在计算机中底层的存储问题。
"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)
无论计算机中采用哪种实现 无外乎就这俩种。
而不是自己去解决,你要了解的是问题本质。
但是我想告诉你的是 对于数据类型的转换 其实就是俩种结构在计算机中底层的存储问题。
"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;
}