C++實現字節數組與16進制字符串互轉,字符串轉16進制字符串

  1. 無符號字節數組轉16進制字符串
std::string bytesToHexString(const BYTE* bytes,const int length) 
{
	if (bytes == NULL) {
		return "";
	}
	std::string buff;
	const int len = length;
	for (int j = 0; j < len; j++) {
		/*if ((bytes[j] & 0xff) < 16) {
			buff.append("0");
		}*/
		int high = bytes[j]/16, low = bytes[j]%16;
		buff += (high<10) ? ('0' + high) : ('a' + high - 10);
		buff += (low<10) ? ('0' + low) : ('a' + low - 10);
	}
	return buff;
}
  1. 16進制字符串 轉無符號字節數組
void hexToBytes(const std::string& hex,BYTE* bytes) 
{
	int bytelen = hex.length() / 2;
	std::string strByte;
	unsigned int n;
	for (int i = 0; i < bytelen; i++) 
	{
		strByte = hex.substr(i * 2, 2);
		sscanf(strByte.c_str(),"%x",&n);
		bytes[i] = n;
	}
}
  1. 字符串轉16進制字符串
/*
* 將字符串編碼成16進制數字,適用於所有字符(包括中文)
*/
std::string encodeHexString(const std::string& str) {
	// 根據默認編碼獲取字節數組
	std::string hexString = "0123456789abcdef";
	string sb;
	// 將字節數組中每個字節拆解成2位16進制整數
	for (int i = 0; i < str.length(); i++) {
		sb += hexString.at((str[i] & 0xf0) >> 4);
		sb += hexString.at((str[i] & 0x0f) >> 0);
	}
	return sb;
}
  1. 16進制字符串轉字符串
std::string hexStringToString(const std::string& hexStr) 
{
	std::string ret;
	std::string hexString = "0123456789abcdef";
	// 將每2位16進制整數組裝成一個字節
	for (int i = 0; i < hexStr.length(); i += 2)
		ret	+= BYTE(hexString.find(hexStr.at(i)) << 4 | hexString.find(hexStr.at(i + 1)));
	return ret;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章