一般来说,加密解密的时候,密钥的生成可能包含一些特殊的不可见字符,为了方便保存,我们可以将字符转化成16进制
c语言中如何将字符串转化成16进制,主要用一下函数
一:字符串转16进制
sprintf((char*)(hex + j), “%02X”, bin[i]);即将一个字符按照%02X格式即16进制输出
void bin2hex(unsigned char *bin,char *hex,int binlength) {
int i = 0;
int j = 0;
for (i = 0,j = 0; i < binlength; i++, j += 2) {
sprintf((char*)(hex + j), "%02X", bin[i]);
printf(""+i);
}
}
我们知道,字符串转16进制按照一个字符用两个16进制的数字标识,所以原始字符串长度是n,16进制字符串就是2n,示例如下:
char *source="abc";
char hexstr[2*strlen(source)];
bin2hex(source,hexstr,strlen(source))
二:16进制转字符串
这里重点是将两个16进制转成一个字符(hexcharToInt(hex[i]) << 4)| hexcharToInt(hex[i + 1]);第一个16进制字符先转数字然后前移4位拼接第二个16进制字符同样转数字,然后强制转化成char字符。
int hexcharToInt(char c)
{
if (c >= '0' && c <= '9') return (c - '0');
if (c >= 'A' && c <= 'F') return (c - 'A' + 10);
if (c >= 'a' && c <= 'f') return (c - 'a' + 10);
return 0;
}
//
void hex2bin(unsigned char *bin, char *hex, int binlength) {
int i = 0;
for (i = 0; i < strlen(hex); i += 2) {
bin[i / 2] = (char)((hexcharToInt(hex[i]) << 4)
| hexcharToInt(hex[i + 1]));
}
}
16进制字符串转普通字符串,即两个16进制数转成一个字符,长度减半。
调用如下:
char *hexstr="13f2a4";
char *comstr[strlen(hexstr)/2];
hex2bin(comstr,hexstr,strlen(hexstr));
版权声明:本文为shyrainxy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。