c语言字符串转16进制及16进制转字符串

  • Post author:
  • Post category:其他


一般来说,加密解密的时候,密钥的生成可能包含一些特殊的不可见字符,为了方便保存,我们可以将字符转化成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 版权协议,转载请附上原文出处链接和本声明。