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,
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,
相关文章推荐
- C++中常见类型转换自定义函数
- c/c++语言数据类型转换的方式及常见问题【绝笔整理】
- 关于OpenCV中利用函数cvConvert实现图像数据类型转换(8U->16S)
- 使用C++ 标准库 stringstream实现各种数据类型之间的转换
- 深入讲解C++数据类型转换的相关函数的知识
- C++:自定义函数数据类型转换
- C++与Python的混合编程-调用有参函数以及C++数据类型与Python数据类型间的转换
- C++ stringstream实现不同类型数据的转换
- C++中sprintf实现将一个基本数据类型的数组转换成字符串
- 利用C++的stringstream对各种数据类型转换
- 用标准C++进行string与各种内置类型数据之间的转换
- VC常见数据类型转换详解(转)
- Afx全局函数及MFC常见数据类型
- C++ 操作符重载、函数对象及类类型转换
- 关于linux下C++中利用socket时的数据类型转换错误
- C++ 数据类型的转换
- C++数据类型转换问题一览
- 利用stringstream实现数据类型的转换。
- Afx全局函数及MFC常见数据类型
- Object.ToString函数在转换日期类型数据时的精度问题