我有一个使用AES加密编码的char *字符串。此字符串包含各种十六进制字符,而不仅仅是ASCII可查看的字符。我需要转换这个字符串,以便我可以通过HTTP发送它,它不接受加密算法生成的所有字符。
转换此字符串的最佳方法是什么?我使用了以下函数,但是有很多空格(0xFF),它无法转换所有字符。
char *strToHex(char *str){
char *buffer = new char[(dStrlen(str)*2)+1];
char *pbuffer = buffer;
int len = strlen( str );
for(int i = 0; i < len ; ++i ){
sprintf(pbuffer, "%02X", str[i]);
pbuffer += 2;
}
return buffer;
}
谢谢你, 贾斯汀
答案 0 :(得分:10)
我不知道c ++中是否有lib,但最好的方法是将字节编码为base64。编写自己的编码器非常简单,如果周围没有标准编码器(但我怀疑会有)。
答案 1 :(得分:5)
一些问题。首先,你的角色可能是签名的,这就是你获得大量FF的原因 - 如果你的角色是0x99,那么当打印时它会被符号扩展到0xFFFFFF99。第二,strlen(或dStrlen - 这是什么?)是不好的,因为你的输入字符串可能有空值。你需要明确地传递字符串长度。
char *strToHex(unsigned char *str, int len){
char *buffer = new char[len*2+1];
char *pbuffer = buffer;
for(int i = 0; i < len ; ++i ){
sprintf(pbuffer, "%02X", str[i]);
pbuffer += 2;
}
return buffer;
}
答案 2 :(得分:0)
您可以使用各种库进行转换,例如: http://www.nuclex.org/downloads/developers/snippets/base64-encoder-and-decoder-in-cxx,但它确实使字符串大于原始字符串,因为它需要一个8位字符并将其转换为7位字符。
然后您需要对其进行解码才能使用它。