int数组转换成char数组进一步思考及5种实现方法
2014-04-30 15:40
351 查看
// printfTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include<stdlib.h> #include<string> #include <limits> using namespace std; // //原理: 使用库函数,拷贝内存; void method1() { long a=129; char s[4]={0}; memcpy(s,&a,sizeof(long));// printf("%x %x %x %x\n",s[0],s[1],s[2],s[3]); //这里有问题,当a的值小于等于128时,都没问题,也就是说,s[0]可以存放一个较小的整数 //但是,当a的值大于128时,会越界,不会自动截断,不会把剩下的部分放到s[1]中 // //数组......... } /******************************* void *memcpy(void *dest, const void *src, size_t n); 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 *******************************/ /******************************** int printf(const char *format,[argument]); 格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。 通常意义上format的格式如下: %[flags][width][.prec][F|N|h|l]type 规定输出数据的格式,具体如下:[1] type type的字符用于规定输出数据的类型,含义如下: 字符 对应数据类型 含义 d、i int 接受整数值并将它表示为有符号的十进制整数,i是老式写法 o unsigned int 无符号8进制整数 u unsigned int 无符号10进制整数 x、X unsigned int 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF f float或double 单精度浮点数或双精度浮点数 e、E double 科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写 g、G double 使用以上两种中最短的形式,大小写的使用同%e和%E c char 字符型。当接受值为字符串时打印字符串中的第一个字符,可以把输入的数字按照ASCII码相应转换为对应的字符 s、S char *、wchar_t * 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符) p void * 以16进制形式输出指针nint *到此字符之前为止,一共输出的字符个数,不输出文本 % 不输入 不进行转换,输出字符‘%’(百分号)本身 注:%g、%G在小数点位数四位或指数大于等于精度时用%e、%E,否则用%f。 flags 规定输出样式,取值和含义如下: 字符 字符名称 说明 空白 右对齐,左边填充空格 - 减号 左对齐,右边填充空格 + 加号 在数字前增加符号 + 或 - 0 数字零 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“-”) 空格 输出值为正时加上空格,为负时加上负号 ********************************/ /*原理:移位,强制转换*/ void method2() { long a=134242304; char s[4]; s[0]=(char)a; s[1]=(char)(a>>8); s[2]=(char)(a>>16); s[3]=(char)(a>>24); printf("%x %x %x %x\n",s[0],s[1],s[2],s[3]); } /*原理: 取a的地址,强制转化为char*,(指针占一个字节,正好四个字节),然后解引用取值并赋给s[i];*/ void method3() { long a=134242304; char s[4]; for(int i = 0;i<4;i++) { s[i] = *((char*)&a+i); } printf("%x %x %x %x\n",s[0],s[1],s[2],s[3]); } //把uchar中的数据还原成long void rmethod() { unsigned char ch[4]={0x00,0x60,0x00,0x08}; unsigned long length=0; //以下操作完成char型数组到long型的转换 //第一种方法 length=(unsigned long)ch[0] | (unsigned long)ch[1]<<8 | (unsigned long)ch[2]<<16 | (unsigned long)ch[3]<<24; cout<<length<<endl; } //注意与函数 itoa\atoi\ltoa\atol区分,这些函数是把 123变成"123",或者相反。 void ft() { int number = 134242304; char st[25]; itoa(number, st, 10); //按十进制转换 ltoa(number, st, 10); printf("integer = %d st = %s\n", number, st); printf("%x %x %x %x\n",st[0],st[1],st[2],st[3]); itoa(number, st, 16); //按16进制转换 printf("integer = %d st = %s\n", number, st); printf("%x %x %x %x\n",st[0],st[1],st[2],st[3]); } int _tmain(int argc, _TCHAR* argv[]) { method1(); /*method2(); method3(); rmethod(); ft();*/ getchar(); return 0; } //sprintf(CharArray, "%d", IntegerArray[i]);
相关文章推荐
- sprintf_s实现int数组转换成char数组
- C#实现char字符数组与字符串相互转换的方法
- java byte数组与int,long,short,byte的转换实现方法
- sprintf_s实现int数组转换成char数组
- java本地方法调用(JNI)的参考代码----实现将String转换成char*,将char*转换成String.
- [ActionScript 3.0] 用TextField的方法getCharIndexAtPoint(x:Number, y:Number):int实现文字在固定范围内显示
- json对象与数组以及转换成js对象的简单实现方法
- PHP实现数组array转换成xml的方法
- c语言中char数组和int的转换
- PHP 数组和字符串互相转换实现方法
- 实现atoi——从char*到int的转换
- PHP数组和字符串互相转换实现方法
- json对象与数组以及转换成js对象的简单实现方法
- int、double、boolean、char、float、long、Object等七种数据类型转换成String数据类型 用到的方法是String.valueOf();
- string、wstring、cstring、 char、 tchar、int、dword转换方法
- C#实现字符串转换成字节数组的简单实现方法
- c语言,string库函数itoa实现:将int转换为char*
- PHP 数组和字符串互相转换实现方法
- PostgreSQL实现交叉表(行列转换)的5种方法示例
- string、wstring、cstring、 char、 tchar、int转换方法