十六進制字符串與十六進制之間轉換

unsigned char ascii_to_num(unsigned char ch)
{
	if (ch >= '0' && ch <= '9')
	{
		ch = ch - '0';
	}
	else if (ch >= 'a' && ch <= 'f' )
	{
		ch = ch - 'a' + 10;
	}
	else if (ch >= 'A' && ch <= 'F')
	{
		ch = ch - 'A' + 10;
	}
	
	return ch;
}


void ascii_to_hex(unsigned char * ascii, unsigned int len, unsigned char *hex)
{
	if (NULL == ascii || NULL == hex) 
	{
		return;
	}

	for (unsigned int i = 0; i < len / 2; ++i)
	{
		hex[i] = (ascii_to_num(ascii[0]) << 4) + ascii_to_num(ascii[1]);
		printf("%x\n", hex[i]);
		ascii += 2;
	}

}

void hex_to_ascii(unsigned char *hex, unsigned int len, unsigned char *ascii)
{
	if (NULL == hex || NULL == ascii)
	{
		return;
	}

	for (int i = 0; i < len; ++i)
	{
		sprintf((char *)ascii + i*2, "%02x", hex[i]);
	}
}


int main()
{
	

	unsigned char arr[] = "c890ed3f1eff1051fa1048c3bb95cbe070ab005ac89f161a6ea1bfca37bff2fcb42d6dccee65d195f53a9b9e3b781fe8232cfb297f80b01442a122feffae4c1b";
	unsigned char hex[1024] = { 0 };
	unsigned char ascii[1024] = { 0 };

	unsigned char *str = arr;
	
	ascii_to_hex(arr, strlen((char *)arr), hex);
	hex_to_ascii(hex, strlen((char *)arr) / 2, ascii);
	printf("%s\n", ascii);

	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章