char 与 int

dianhui 2009-09-03 04:28:02
比方说,一个char类型数组。
char dada[4];
我们知道,其在计算机内都是二进制表示的,dada[4]刚好四个字节,共32位,我们假如它存贮的为某一商品的价格值,即一个整数值,现在,我们如何将存贮dada内的整数值取出来呢,因为直观上看它只不过是一个char类型的数组,我们是看不出它所表示的数值来。事实上,dada能表示的最大整数值为2的32次方减1。
VC里面有什么方法中函数可以直接转换吗?还是得自己写函数转换?如果自己写有什么好的思路提供提供!

...全文
171 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
百事烟 2009-09-04
  • 打赏
  • 举报
回复
	//取出方法要和保存的方法相对应
int i;
char buf[4];

//保存
i = 12345;
memcpy(buf, &i, 4);

//取出
int *p = (int*)buf;
i = *p;
printf("%d",i);
jiabin_007 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 saimen 的回复:]
typedef union tagMYData
{
int nData;
char szData[4];
}UN_MYDATA;

自己再去查查 union 吧,不多说了,费时间
[/Quote]
feiyangdn 2009-09-04
  • 打赏
  • 举报
回复
查看MSDN,或百度
atof, atoi, _atoi64, atol这几个函数的使用

例子:

#include <stdlib.h>
#include <stdio.h>

void main( void )
{
char *s; double x; int i; long l;

s = " -2309.12E-15"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );

s = "7.8912654773d210"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );

s = " -9885 pigs"; /* Test of atoi */
i = atoi( s );
printf( "atoi test: ASCII string: %s\t\tinteger: %d\n", s, i );

s = "98854 dollars"; /* Test of atol */
l = atol( s );
printf( "atol test: ASCII string: %s\t\tlong: %ld\n", s, l );
}
feiyangdn 2009-09-04
  • 打赏
  • 举报
回复
#include <stdlib.h>

int money = atoi("1234");
ASSERT(money == 1234);
simghost 2009-09-04
  • 打赏
  • 举报
回复
那好办的,用CString

CString sMoney="";
for (int i=0;i<4;i++)
{
CString Tmp;
if (dada[i]<10) Tmp.Format("0%d",dada[i]);
else Tmp.Format("%d",data[i]);
sMoney+=Tmp;
}
int iMoney=atoi(sMoney);
dianhui 2009-09-04
  • 打赏
  • 举报
回复
对,是这么个意思!
simghost 2009-09-04
  • 打赏
  • 举报
回复
你的意思是 65656565元的商品 存在dada中是 AAAA ?想把 AAAA转成 65656565?
dianhui 2009-09-04
  • 打赏
  • 举报
回复
这个问题这么麻烦么!
周成风 2009-09-04
  • 打赏
  • 举报
回复
试一试用C++类型转换符reinterpret_cast。

可以对数据进行重新解释为新类型,这样的转换依赖机器,不一定是安全的。
muzizongheng 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 saimen 的回复:]
typedef union tagMYData
{
int nData;
char szData[4];
}UN_MYDATA;

自己再去查查 union 吧,不多说了,费时间
[/Quote]

顶这个. 我一直就是这样用的.
HuWenjin 2009-09-04
  • 打赏
  • 举报
回复
另外,你需要先测试一下
int 在你的机器里保存时的字节序
szData要按这个顺序存
HuWenjin 2009-09-04
  • 打赏
  • 举报
回复
typedef union tagMYData
{
int nData;
char szData[4];
}UN_MYDATA;

自己再去查查 union 吧,不多说了,费时间
dianhui 2009-09-04
  • 打赏
  • 举报
回复
比方说:
char dada[4];
data[0]='d';//ASCII值为100
data[1]=0;
data[2]=0;
data[3]=0;

int val = *((int*)dada);

如果左边第0位为最低位,则val应该获取到得整数值应该为100,而经测试val获取到的值为-859045788
倒较像一个地址值。
dianhui 2009-09-04
  • 打赏
  • 举报
回复
int val = *((int*)dada);

////
测试过,上面这个方法不对。
bobo_2003 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vctiro 的回复:]
C/C++ codeint val=*((int*)dada);
[/Quote]

顶这个
jyh_baoding 2009-09-03
  • 打赏
  • 举报
回复
按地址取就可以做到
yuhudie203 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vctiro 的回复:]
C/C++ codeint val=*((int*)dada);
[/Quote]
对了 还有强制转换
yuhudie203 2009-09-03
  • 打赏
  • 举报
回复
需要考虑高低位的问题 要么 char[2]*256*256*256+char[3]*256*256+char[0]*256+char[1]

要么char[0]*256*256*256+char[1]*256*256+char[2]*256+char[3]
zoulie 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vctiro 的回复:]
C/C++ codeint val=*((int*)dada);
[/Quote]
直接强制转换
vcTiro 2009-09-03
  • 打赏
  • 举报
回复
int val = *((int*)dada);
加载更多回复(1)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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