您的位置:首页 > 编程语言 > C语言/C++

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

2018-02-05 14:22 453 查看
该篇文章大部分内容都是网络上看到,然后自己写了一遍然后贴了下来。

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,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: