C语言对字符串的一些处理 字符拆分 大小写转换 转16进制等

// 两个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;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值