int数组转换成char数组进一步思考及5种实现方法

2014-04-30 15:40:23 
    1. // printfTest.cpp : 定义控制台应用程序的入口点。
    2. //
    3. #include 'stdafx.h'
    4. #include<iostream>
    5. #include<stdlib.h>
    6. #include<string>
    7. #include <limits>
    8. using namespace std;
    9. //
    10. //原理: 使用库函数,拷贝内存;
    11. void method1()
    12. {
    13. long a=129;
    14. char s[4]={0};
    15. memcpy(s,&a,sizeof(long));//
    16. printf('%x %x %x %x\n',s[0],s[1],s[2],s[3]);
    17. //这里有问题,当a的值小于等于128时,都没问题,也就是说,s[0]可以存放一个较小的整数
    18. //但是,当a的值大于128时,会越界,不会自动截断,不会把剩下的部分放到s[1]中
    19. //
    20. //数组.........
    21. }
    22. /*******************************
    23. void *memcpy(void *dest, const void *src, size_t n);
    24. 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
    25. *******************************/
    26. /********************************
    27. int printf(const char *format,[argument]);
    28. 格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。
    29. 通常意义上format的格式如下:
    30. %[flags][width][.prec][F|N|h|l]type
    31. 规定输出数据的格式,具体如下:[1]
    32. type
    33. type的字符用于规定输出数据的类型,含义如下:
    34. 字符
    35. 对应数据类型
    36. 含义
    37. d、i
    38. int
    39. 接受整数值并将它表示为有符号的十进制整数,i是老式写法
    40. o
    41. unsigned int
    42. 无符号8进制整数
    43. u
    44. unsigned int
    45. 无符号10进制整数
    46. x、X
    47. unsigned int
    48. 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF
    49. f
    50. float或double
    51. 单精度浮点数或双精度浮点数
    52. e、E
    53. double
    54. 科学计数法表示的数,此处'e'的大小写代表在输出时用的“e”的大小写
    55. g、G
    56. double
    57. 使用以上两种中最短的形式,大小写的使用同%e和%E
    58. c
    59. char
    60. 字符型。当接受值为字符串时打印字符串中的第一个字符,可以把输入的数字按照ASCII码相应转换为对应的字符
    61. s、S
    62. char *、wchar_t *
    63. 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0'结尾,这个'\0'即空字符)
    64. p
    65. void *
    66. 以16进制形式输出指针nint *到此字符之前为止,一共输出的字符个数,不输出文本
    67. %
    68. 不输入
    69. 不进行转换,输出字符'%’(百分号)本身
    70. 注:%g、%G在小数点位数四位或指数大于等于精度时用%e、%E,否则用%f。
    71. flags
    72. 规定输出样式,取值和含义如下:
    73. 字符
    74. 字符名称
    75. 说明
    76. 空白
    77. 右对齐,左边填充空格
    78. -
    79. 减号
    80. 左对齐,右边填充空格
    81. +
    82. 加号
    83. 在数字前增加符号 + 或 -
    84. 0
    85. 数字零
    86. 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“-”)
    87. 空格
    88. 输出值为正时加上空格,为负时加上负号
    89. ********************************/
    90. /*原理:移位,强制转换*/
    91. void method2()
    92. {
    93. long a=134242304;
    94. char s[4];
    95. s[0]=(char)a;
    96. s[1]=(char)(a>>8);
    97. s[2]=(char)(a>>16);
    98. s[3]=(char)(a>>24);
    99. printf('%x %x %x %x\n',s[0],s[1],s[2],s[3]);
    100. }
    101. /*原理: 取a的地址,强制转化为char*,(指针占一个字节,正好四个字节),然后解引用取值并赋给s[i];*/
    102. void method3()
    103. {
    104. long a=134242304;
    105. char s[4];
    106. for(int i = 0;i<4;i++)
    107. {
    108. s[i] = *((char*)&a+i);
    109. }
    110. printf('%x %x %x %x\n',s[0],s[1],s[2],s[3]);
    111. }
    112. //把uchar中的数据还原成long
    113. void rmethod()
    114. {
    115. unsigned char ch[4]={0x00,0x60,0x00,0x08};
    116. unsigned long length=0;
    117. //以下操作完成char型数组到long型的转换
    118. //第一种方法
    119. length=(unsigned long)ch[0] | (unsigned long)ch[1]<<8 | (unsigned long)ch[2]<<16 | (unsigned long)ch[3]<<24;
    120. cout<<length<<endl;
    121. }
    122. //注意与函数 itoa\atoi\ltoa\atol区分,这些函数是把 123变成'123',或者相反。
    123. void ft()
    124. {
    125. int number = 134242304;
    126. char st[25];
    127. itoa(number, st, 10); //按十进制转换
    128. ltoa(number, st, 10);
    129. printf('integer = %d st = %s\n', number, st);
    130. printf('%x %x %x %x\n',st[0],st[1],st[2],st[3]);
    131. itoa(number, st, 16); //按16进制转换
    132. printf('integer = %d st = %s\n', number, st);
    133. printf('%x %x %x %x\n',st[0],st[1],st[2],st[3]);
    134. }
    135. int _tmain(int argc, _TCHAR* argv[])
    136. {
    137. method1();
    138. /*method2();
    139. method3();
    140. rmethod();
    141. ft();*/
    142. getchar();
    143. return 0;
    144. }
    145. //sprintf(CharArray, '%d', IntegerArray[i]);

    c、c++ int 转 char*

    在mac上写代码时发现itoa 函数木有,就自己写了一个:char* itoa(int src){     int temp = -1;     int tv = src>0?src:-src;     int length = 0;     while ((tv = tv/10)>0) {         length++;     }     length++;     t 

    string数组类型转换为int数组(数组类型之间的转换)

    string数组类型转换为int数组.方法一:ConvertAll的用法Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1 public static int StrToInt(string str)2 {3 return int.Parse(st 

    C++将int型整数转换为char类型数组

    将int型整数转换为char类型数组: 使用snprintf(s, sizeof(s), '%d', x),其中s为数组名,sizeof(s)为数组长度,'%d'指定整数类型,x为需要进行转换的整数。正确调用可完成整数类型转换字符数组。 通常不建议使用itoa()方法,因为它是一个非标准的C / C++语言功能,因此常常无法通过编译。int x;char s[100]; cin>... 

    stm32 将int转换成char[]

    int a;int* b = &a;char* c 

    c语言中char数组和int的转换

    在<stdlib.h>头文件中有两个函数,int atoi(char *p)和char *itoa(int p),分别将装有整数的char数组转化为整数,和将整数按位数分解依次存入char数组中。

    听说有人不了解柔性数组

    1 引言 定长数组包在平时的开发中,缓冲区数据收发时,如果采用缓冲区定长包,假定大小是 1k,MAX_LENGTH 为 1024。结构体如下://定长缓冲区 structmax_b... 

    数组指针和指针数组的区别

    数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就... 
    (0)

    相关推荐