2017-08-23 186 views
-10

我已经真正搜索过高和低。我觉得不知何故,我只是错过了那么简单的事情。C++将十六进制字符串转换为十六进制char *十六进制数字

哦,这里有云:

string x = "1234"; 

string y = "\x12\x34"; 

我希望把X成Y。

有一个我正在使用的c库只接受y,但x不起作用。

我用openssl/sha.h库创建了十六进制字符串,我想像y一样传递它们。

这一定是可能的,我只是想念一些东西。

+1

你尝试过这么远吗?你希望我们为你写代码吗?你有没有尝试过,失败了? – muXXmit2X

+3

首先,请明确指出您的语言是C还是C++。 – BLUEPIXY

+0

这听起来像是[XY问题](http://xyproblem.info/)。我怀疑C库只接受'“\ x12 \ x34”'形式的字符串。请[编辑]你的问题,并告诉我们更多关于该C库的信息。 –

回答

0

去一些IRC频道,我得到了一些帮助,最后:

char nibble(char c) { 
    if (c >= '0' && c <= '9') 
    return c - '0'; 
    return 10 + (c - 'a'); 
} 

string stringToHex(string s) { 
    string o; 
    for (size_t i=0 ; i<s.size() ; i+=2){ 
    char c = (nibble(s[i]) << 4) | nibble(s[i+1]); 
    o.push_back(c); 
    } 
    return o; 
} 



    string s = "1234"; 
    string h = "\x12\x34"; 
    string o = stringToHex(s); 
    cout << "s " << s << endl; 
    cout << "h " << h << endl; 
    cout << "o " << o << endl; 
    cout << "o == h " << (o == h) << endl; 
相关问题