📄 str2hex.cpp
字号:
// str2hex.cpp
#include "stdafx.h"
#include "str2hex.h"
///////////////////////////////////////////////////////////////////////////////
// 算法
// 过滤16进制字符串中的非16进制字母
CString FilterHexStr(CString strHex)
{
int i;
char ch;
CString str;
strHex.MakeUpper();
while( (i=strHex.Find(_T("0X")))>=0 )
strHex.Delete(i, 2);
str.Empty();
for(i=0; i<strHex.GetLength(); i++) // 检查是否都是合法的16进制字符: 0~F
{
ch=(char)strHex.GetAt(i);
if(ch>=48&&ch<=57 || ch>=65&&ch<=70 || ch>=97&&ch<=102)
{
str += ch;
}
}
if(str.GetLength()%2) // 如果不足一个16进制值,最后一个字符去掉
str.Delete(str.GetLength()-1);
return str;
}
// 将合法的16进制字符串转换为整数数组
unsigned int HexStr2IntArray(CString strHex, unsigned char *ucIntArray)
{
int i,j;
CString str;
unsigned char ch;
unsigned char temp[2];
if(!ucIntArray)
return 0;
str = strHex;
// 将16进制字符串转为整型数组
for(i=0; i<str.GetLength(); i+=2)
{
for(j=0; j<2; j++)
{
ch=(char)str.GetAt(i+j);
if(ch>=48&&ch<=57)
temp[j]=ch-48;
else if(ch>=65&&ch<=70)
temp[j]=ch-65+10;
else if(ch>=97&&ch<=102)
temp[j]=ch-97+10;
}
ucIntArray[i/2]=temp[0]*16+temp[1];
}
return str.GetLength()/2;
}
// 将整数数组转换为合法的16进制字符串
CString IntArray2HexStr(unsigned char *ucIntArray, unsigned int count)
{
CString strHex;
CString str;
ASSERT(ucIntArray);
ASSERT(count>0);
str.Empty();
strHex.Empty();
for(unsigned int i=0; i<count; i++)
{
str.Format(_T("%02X"),ucIntArray[i]);
strHex+=str;
}
return strHex;
}
// 过滤2进制字符串中的非2进制字母
CString FilterBinStr(CString strBin)
{
int i;
char ch;
CString str;
str.Empty();
for(i=0; i<strBin.GetLength(); i++) // 检查是否都是合法的16进制字符: 0~F
{
ch=(char)strBin.GetAt(i);
if( ch==_T('0') || ch==_T('1') )
{
str += ch;
}
}
if(str.GetLength()%8) // 如果不足一个2进制值(8位), 最后一个不足8位的二进制去掉
str=str.Left(str.GetLength()/8*8);
return str;
}
// 将合法的2进制字符串转换为整数数组
unsigned int BinStr2IntArray(CString strHex, unsigned char *ucIntArray)
{
int i,j;
unsigned char ch;
unsigned char temp;
if(!ucIntArray)
return 0;
// 将2进制字符串转为整型数组
for(i=0; i<strHex.GetLength(); i+=8)
{
temp=0;
for(j=0; j<8; j++)
{
ch=(char)strHex.GetAt(i+j);
if(ch==_T('1'))
temp += 1<<(7-j);
}
ucIntArray[i/8]=temp;
}
return strHex.GetLength()/8;
}
// 整数转2进制数: 10d->0000_1010b
unsigned int Int2Bin(unsigned char hex[], unsigned int size_hex,
unsigned char bin[], unsigned int size_bin)
{
unsigned int i;
if(size_hex*8>size_bin)
return 0;
for(i=0; i<size_hex; i++)
{
bin[i*8+0] = (hex[i]>>7) & 0x01;
bin[i*8+1] = (hex[i]>>6) & 0x01;
bin[i*8+2] = (hex[i]>>5) & 0x01;
bin[i*8+3] = (hex[i]>>4) & 0x01;
bin[i*8+4] = (hex[i]>>3) & 0x01;
bin[i*8+5] = (hex[i]>>2) & 0x01;
bin[i*8+6] = (hex[i]>>1) & 0x01;
bin[i*8+7] = (hex[i]>>0) & 0x01;
}
return 1;
}
// 2进制转为整数: 0000_1010b->10d
unsigned int Bin2Int(unsigned char bin[], unsigned int size_bin,
unsigned char hex[], unsigned int size_hex)
{
unsigned int i;
if(size_bin>size_hex*8)
return 0;
for(i=0; i<size_bin; i++)
{
bin[i] &= 0x01;
}
for(i=0; i<size_hex; i++)
{
hex[i] = bin[i*8+0]<<0 | bin[i*8+1]<<1 | bin[i*8+2]<<2 | bin[i*8+3]<<3 |
bin[i*8+4]<<4 | bin[i*8+5]<<5 | bin[i*8+6]<<6 | bin[i*8+7]<<7;
}
return 1;
}
// end of str2hex.cpp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -