一、字节转16进制字符串
std::string bytestohexstring(char* bytes,int bytelength) {
string str("");
string str2("0123456789abcdef");
for (int i = 0; i < bytelength; i++) {
int b;
b = 0x0f & (bytes[i] >> 4);
str.append(1, str2.at(b));
b = 0x0f & bytes[i];
str.append(1, str2.at(b));
}
return str;
}
二、16进制字符串转2进制字符串
方法1:
string getBinStr(string hexStr) {
long long val = strtoll(hexStr.c_str(), NULL, 16);
string binStr = "";
while (val > 0) {
int remainder = val % 2;
binStr.insert(binStr.begin(), '0' + remainder);
val /= 2;
}
//不足长度的补0
if (binStr.length() < 32) { //这里的32为你实际要输出的2进制字符串的长度
string temp = "";
for (int i = 0; i < 32 - binStr.length(); i++) {
temp.append("0");
}
binStr = temp.append(binStr);
}
return binStr;
}
方法2:
//性能略优于方法1
string getBinStr(string hexStr) {
long long val = strtoll(hexStr.c_str(), NULL, 16);
char binary[32];
for (int i = 31; i >= 0; i--)
{
binary[31 - i] = '0' + ((val >> i) & 1);
}
string binStr(binary);
return binStr;
}
方法3:
#include <bitset>
//无法处理大于32位的数值。 性能与方法2差不多
string getBinStr(string hexStr) {
long val = stol(hexStr.c_str(), NULL, 16);
bitset<32> binaryNum(val);
return binaryNum.to_string();
}