// 两个16进制的字符转成一个字节
int IsLowercase(signed int character)
{
int result;
result = character >= 'a' && character < '{';
return result;
}
int UpperCaseToLower(int Character)
{
if ( IsLowercase(Character) )
Character -= 32;
return Character;
}
//这里是固定传入偶数个字符的16进制字符
void StrToHex(_BYTE *HexStr, char *HexNum)
{
_BYTE *tHexStr; // r7
char *tHexNum; // r4
signed int Count; // r6
int HexResult; // r8
char LowCaseCharacter; // r0
char tCount; // r0
tHexStr = HexStr;
tHexNum = HexNum;
Count = 0;
HexResult = 0;
while ( Count < strlen(HexStr)-1 && *tHexStr )
{
LowCaseCharacter = UpperCaseToLower((char)*tHexStr++);
if ( LowCaseCharacter < 0x30 || LowCaseCharacter >= 0x3A )// 判断非数字
{
if ( LowCaseCharacter < 'A' || LowCaseCharacter >= 'G' )// 如果不是A-F 之间的字符值 那就错误退出
{
printf((int)"key must be in hexadecimal notation\n");
return;
}
HexResult = LowCaseCharacter + 16 * HexResult - 0x37;// 如果是A-F中的数
}
else
{
HexResult = LowCaseCharacter + 16 * HexResult - 0x30;// 如果是数字
}
tCount = Count++;
if ( tCount & 1 ) // 如果当前读的是奇数个 那么就不存储到数组中 如果是偶数个 才将两个一起存到数组中
tHexNum[Count / 2 - 1] = HexResult;
}
}
字节反转实现
unsigned short __cdecl _byteswap_ushort(unsigned short i)
{
unsigned short j;
j = (i << 8) ;
j += (i >> 8) ;
return j;
}
unsigned long __cdecl _byteswap_ulong(unsigned long i)
{
unsigned int j;
j = (i << 24);//最低位到最高位
j += (i << 8) & 0x00FF0000; //第二个字节到第三个字节
j += (i >> 8) & 0x0000FF00;//第三个字节到第二个字节
j += (i >> 24);//最高位到最低位
return j;
}
字符串的拆分
//字符串的拆分
int SeparateString(char *src, char *delim, char *Save)
{
char *pSave; // r8@1
char *pdelim; // r9@1
char *pSrc; // r5@1
signed int Count; // r6@1
bool v7; // zf@2
size_t Len; // r10@5
char *PosStrDelim; // r4@5
pSave = Save;
pdelim = delim;
pSrc = src;
Count = 0;
if (Save)
{
v7 = delim == 0;
if (delim)
v7 = *src == 0;
if (!v7)
{
Len = strlen(delim);
memset(pSave, 0, sizeof(pSave));
PosStrDelim = strstr(pSrc, pdelim);//返回,后面的字符串
Count = 1;
while (PosStrDelim)
{
memcpy(&pSave[(Count - 1) * 0x30], pSrc, PosStrDelim - pSrc);//0x30个字节为一个间隔 进行拆分 存储
pSrc = &PosStrDelim[Len];
++Count;
PosStrDelim = strstr(&PosStrDelim[Len], pdelim);
}
memcpy(&pSave[(Count - 1) * 0x30], pSrc, strlen(pSrc));
if (Count > 0x2000)
Count = 0x2000;
}
}
return Count;
}