char buff[4] ="123" ,存的是十进制的123 如何取出来

只是很想懂 2012-07-15 01:31:53
char buff[4] = "123";
int x ;

x= *(int*)buff;

对么 ? 如何用printf 打印 ?? 就是打印格式。

这样取出来的应该是 整型的 123 吧?
...全文
477 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
laciqs 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]

正在知道 不知可否指点一二 引用 17 楼 的回复:

引用 3 楼 的回复:

C/C++ code
char buff[4] = "123";
int x = atoi( buffer );
printf( "%d", x );

同意


x= *(int*)buff;
你知道内存在整数和字符的部局么?
[/Quote]
debug,看内存。
只是很想懂 2012-07-16
  • 打赏
  • 举报
回复
正在知道 不知可否指点一二 [Quote=引用 17 楼 的回复:]

引用 3 楼 的回复:

C/C++ code
char buff[4] = "123";
int x = atoi( buffer );
printf( "%d", x );

同意


x= *(int*)buff;
你知道内存在整数和字符的部局么?
[/Quote]
只是很想懂 2012-07-16
  • 打赏
  • 举报
回复
了解一下 嘿嘿 [Quote=引用 18 楼 的回复:]

用sscanf(...);
[/Quote]
csdmdsc 2012-07-16
  • 打赏
  • 举报
回复
用sscanf(...);
qixing1115 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

C/C++ code
char buff[4] = "123";
int x = atoi( buffer );
printf( "%d", x );
[/Quote]
同意


x= *(int*)buff;
你知道内存在整数和字符的部局么?
只是很想懂 2012-07-16
  • 打赏
  • 举报
回复
言简意赅。受教。[Quote=引用 15 楼 的回复:]

对电脑而言只有二进制字节,对人脑才有字符串、十进制数、……
[/Quote]
赵4老师 2012-07-16
  • 打赏
  • 举报
回复
对电脑而言只有二进制字节,对人脑才有字符串、十进制数、……
只是很想懂 2012-07-16
  • 打赏
  • 举报
回复
嗯嗯 弄明白了 。谢谢 [Quote=引用 8 楼 的回复:]

char buff[4] = "123";
int x ;
x= *(int*)buff;

这样做的结果就是把buff首地址转换为int*型指针,然后将这个指针指向的四字节数据复制到int型整数x中
内存没有变化,x的内存依然是“0x31 0x32 0x33 0x00”
它的值是51*65536+50*256+49,和123差了十万八千里
[/Quote]
只是很想懂 2012-07-16
  • 打赏
  • 举报
回复
嗯嗯 受教 ! 谢谢 [Quote=引用 7 楼 的回复:]

别想当然好吗?
别自己发明语法好吗?
去查查书好吗?

在32位big-endian计算机上
“char buff[4] = "123"; ”这个语句声明的数组其内存为四个字节“0x31 0x32 0x33 0x00”
int型整数1的内存为四个字节“0x01 0x00 0x00 0x00”
int型整数2的内存为四个字节“0x02 0x00 0x00 0x00”
int型整数3……
[/Quote]
baichi4141 2012-07-15
  • 打赏
  • 举报
回复
char buff[4] = "123";
int x ;
x= *(int*)buff;

这样做的结果就是把buff首地址转换为int*型指针,然后将这个指针指向的四字节数据复制到int型整数x中
内存没有变化,x的内存依然是“0x31 0x32 0x33 0x00”
它的值是51*65536+50*256+49,和123差了十万八千里
baichi4141 2012-07-15
  • 打赏
  • 举报
回复
别想当然好吗?
别自己发明语法好吗?
去查查书好吗?

在32位big-endian计算机上
“char buff[4] = "123"; ”这个语句声明的数组其内存为四个字节“0x31 0x32 0x33 0x00”
int型整数1的内存为四个字节“0x01 0x00 0x00 0x00”
int型整数2的内存为四个字节“0x02 0x00 0x00 0x00”
int型整数3的内存为四个字节“0x03 0x00 0x00 0x00”
int型整数123的内存为四个字节“0x7B 0x00 0x00 0x00”
你发明的什么语法能自动转换上面这些内存?
只是很想懂 2012-07-15
  • 打赏
  • 举报
回复
函数不能解决我的困扰哦 。 再看看我的困扰 。atoi 很好用 [Quote=引用 3 楼 的回复:]

C/C++ code
char buff[4] = "123";
int x = atoi( buffer );
printf( "%d", x );
[/Quote]
只是很想懂 2012-07-15
  • 打赏
  • 举报
回复
像我这样打印出来的是 1244972 printf(“%d”,x);当然用函数转换之后是对的 。我想请问一下 ,为什么是 ascii码值的组合呢 ? 应该娶到它对应的数值了呀。。[Quote=引用 4 楼 的回复:]

你那样得到的是几个字符'123\0'的ascii码值组合,看它们在内存中的布局。
[/Quote]
Vincent_Song 2012-07-15
  • 打赏
  • 举报
回复
你那样得到的是几个字符'123\0'的ascii码值组合,看它们在内存中的布局。
zjs100901 2012-07-15
  • 打赏
  • 举报
回复
char buff[4] = "123"; 
int x = atoi( buffer );
printf( "%d", x );
pathuang68 2012-07-15
  • 打赏
  • 举报
回复
如果不准用atoi之类的库函数,那么可以参考:

int POW(int n)// 计算10的n次方
{
int npower = 1;
for(int i = 0; i < n; ++i)
{
npower *= 10;
}
return npower;
}

int main()
{
int number = 0;
char buff[4] = "123";
int len = strlen(buff);

for(int i = 0; i < len; ++i)
{
number += (buff[i] - '0') * POW(len - i - 1);
}

printf("%d\n", number);

return 0;
}
pathuang68 2012-07-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
char buff[4] = "123";
int x ;

x= *(int*)buff;

对么 ? 如何用printf 打印 ?? 就是打印格式。

这样取出来的应该是 整型的 123 吧?
[/Quote]

x= *(int*)buff;这样是不可以的,正确的做法参考10楼
pathuang68 2012-07-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

C/C++ code
char buff[4] = "123";
int x = atoi( buffer );
printf( "%d", x );
[/Quote]

这个方法是对的,不过上面有个小typo,应该是

char buff[4] = "123";
int x = atoi( buff );
printf( "%d", x );
laciqs 2012-07-15
  • 打赏
  • 举报
回复
用atoi或sprintf。
MagiSu 2012-07-15
  • 打赏
  • 举报
回复
你要用atoi转化一下。
加载更多回复(1)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧