C++ 数据类型转换,常见函数实现

该篇文章大部分内容都是网络上看到,然后自己写了一遍然后贴了下来。

1,memset的实现。

void * memset_1(void * inPtr,int value,size_t size){
assert(!(inPtr==NULL));
char * tmpPtr = (char*)inPtr;
while(size--){
*tmpPtr = (char)value; 
tmpPtr++;
}
return inPtr;
}

自定义memset初始化int类型

void *memset_int(void *ptr,int value,int length) {
assert(!(ptr==NULL));
void * tmpPtr = ptr;
while (length) {
length -= 4;
*(int *)tmpPtr = value;
tmpPtr = (int *)tmpPtr + 1;//int类型的指针+1长度增加4,就好像数组+1增加一个数组类型的长度一样。
}
return ptr;
}

2,memcpy实现

void *memcpy_1(void * outPtr,void * inPtr,size_t size){
assert(!(outPtr==NULL)&&!(inPtr==NULL));
char* tmpOutChar = (char*)outPtr;
char* tmpInChar = (char*)inPtr;
while(size--){
*tmpOutChar = *tmpInChar;
tmpOutChar++;
tmpInChar++;
}
return outPtr;
}

3,strlen的实现

int strlen_1(char* inPtr){
assert(!(inPtr==NULL));
int num = 0;
while(*inPtr++!='\0'){
num++;
}
return num;
}

4,strcat的实现 还是不要用while(*frontChar++)这种写法。

void strcat_1(char* frontChar,char* backChar){
assert(!(frontChar==NULL)&&!(backChar==NULL));
while(*frontChar!='\0'){
frontChar++;
}
while(*backChar!='\0'){
*frontChar = *backChar;
frontChar++;
backChar++;
}
return;
}

5,将int数组的内容放到char数组里,将char数组的内容放到int数组里。

void *intToByte(char* outPtr,int* inPtr,int intLength) {
int num = 0;
for (int i = 0; i < intLength; i++)
{
outPtr[i * 4] = (char)(inPtr[i] & 0xff);
outPtr[i * 4 + 1] = (char)((inPtr[i] & 0xff00)>>8);
outPtr[i * 4 + 2] = (char)((inPtr[i] & 0xff0000)>>16);
outPtr[i * 4 + 3] = (char)((inPtr[i] & 0xff000000)>>24);
}
return outPtr;
}

void * byteToInt(char* inPtr,int* outPtr,int intLength) {
for (int i = 0; i < intLength; i++)
{
outPtr[i] = inPtr[i*4];
outPtr[i] |= inPtr[i * 4 +1]<<8;
outPtr[i] |= inPtr[i * 4 + 2]<<16;
outPtr[i] |= inPtr[i * 4 + 3]<<24;
}
return outPtr;
}

6,toupper与tolower实现

char toupper_1(char inChar){
if(inChar>='a'&&inChar<='z')
return inChar + 'A' - 'a';
return inChar;
}


char tolower_1(char inChar){
if(inChar>='A'&&inChar<='Z')
return inChar+'a'-'A';
return inChar;
}

7,将char转换成16进制字符进行存储,将16进制字符转回char

void byteTohexstr(char* inChar,size_t length,char* outHexChar){
char hexstr[17] = "0123456789ABCDEF";
unsigned char tmpChar;
for (int i = 0; i < length; i++)
{
tmpChar = inChar[i];
outHexChar[i*2] = hexstr[(tmpChar>>4)&0x0f];
outHexChar[i*2+1] = hexstr[tmpChar&0x0f];
}
}

void hexstrTobyte(char* inHexChar,size_t length,char* outChar){
int tmpValue = 0;
short i=0;
unsigned char high,lower;
for (i = 0; i < length; i++)
{
high = toupper_1(inHexChar[i*2]);
lower = toupper_1(inHexChar[i*2+1]);
 
A - 65 //57  - 9 //55  - 7 //48   - 0
//if (high > 0x39)  
  //          high -= 0x37; 
  //      else  
  //          high -= 0x30;
  //
  //      if (lower > 0x39)  
  //          lower -= 0x37;  
  //      else  
  //          lower -= 0x30;  



if(high>=(int)'A')
high = high - (int)'A'+ 10;
else
high = high - (int)'0';
if(lower>=(int)'A')
lower = lower - (int)'A'+ 10;
else
lower = lower - (int)'0';
outChar[i] = (high<<4)|lower;
}
}

8,























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值