密码学中常常需要用到字符串转换为十六进制,进而转换为二进制进行加密
鉴于网上搜的很多方法都有些复杂,很多名为c++,实则只是套了个c++的壳子,写的还是c语言的内容,并没有体现出c++语言本身的一些特色,我自己常识写了个字符串转成十六进制的函数,以之备忘。
需要用到的是ios::base中的hex,有时通过流进行数据处理,很多事情会变得异乎寻常的方便
具体代码如下:
string string_to_hex(const string& str) //transfer string to hex-string
{
string result="0x";
string tmp;
stringstream ss;
for(int i=0;i<str.size();i++)
{
ss<<hex<<int(str[i])<<endl;
ss>>tmp;
result+=tmp;
}
return result;
}
上述代码是将字符串转换为16进制,并将该16进制数用string保存起来,如果要将字符串里的16进制数字直接变为long long形,可直接使用c语言中的strtoll函数
long long string_to_bit(const string& str)//transfer hex-string to bit
{
long long result=strtoll(str.c_str(), NULL, 16);//第三个参数base为合法字符范围,base=2,为0、1,base=16,合法字符则为0-F,开头的0x自动忽略
return result;
}