char数组转化为十进制整数

3 篇文章 0 订阅

通过一些通信方式传输的数据(比如:串口传输),有时候会保存为char类型的数据数据,我们需要把char数组中的所有数据转化为int整数,方法一是直接通过移位运算来实现:

char c[4] = { 0x3,0x0f,0xf,0xf };  
char t;  
int num = 0;  
int len = sizeof(c) / 2;  
char d[sizeof(c) / 2]{ 0 };  
for (int i = 0, j = 0; j < sizeof(c); i++, j += 2)  
    d[i] = (c[j] << 4) | c[j + 1];  
for (int i = 0, j = len - 1; i < len / 2; i++, j--)  
    t = d[i], d[i] = d[j], d[j] = t;  
strncpy((char*)& num, d, len);  
cout << num << endl;  

结果直接保存在整数int中

使用这种方法最好确认一下:

char数组中保存的值在内存中为数值的十六进制方式显示,而不是ASCII码方式显示,

可以看到char nn数组中保存为3FFF,在内存中的现实方式为十六进制数字方式显示,才能计算出正确的num结果。

如果在函数调用中,传递的参数为ASCII码显示,就是用直接对应的关系组成相对应的实际数字。

.

可以看到用局部参数char c数组去接受dac_buffer传递进来的3FFF参数,保存在内存中为ASCII码显示,运算的为实际十进制数的代码为:

u32 dac_total= 0;  
u32 dac_0 =(u32)dac_buffer[0] ;  
u32 dac_1 =(u32)dac_buffer[1] ;  
u32 dac_2 =(u32)dac_buffer[2] ;  
u32 dac_3 =(u32)dac_buffer[3] ;  
switch(dac_0)  
{  
case 0x33:  
    dac_total = 3 * 16 * 16 * 16;  
}  
switch(dac_1)  
{  
case 0x46:  
    dac_total += 15 * 16 * 16;  
}  
switch(dac_2)  
{  
case 0x46:  
    dac_total += 15 * 16;  
}  
switch(dac_3)  
{  
case 0x46:  
    dac_total += 15;  
} 

我这里是对3FFF进行还原为实际对应的十进制数,dac_total保存结果。

用xilinx SDK进行参数传递会把接受到的参数用ASCII码表示,常规理解应该用十六进制来表示(在visual studio中就是这样),但是不知道为什么在这个IED中会使用ASCII码来储存

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值