通过一些通信方式传输的数据(比如:串口传输),有时候会保存为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码来储存