怎样把char型数组转存为int型数组?
发布网友
发布时间:2022-04-24 00:23
我来回答
共3个回答
热心网友
时间:2023-10-15 08:50
#include <stdio.h>
#include <string.h>
typedef unsigned char uchar;
typedef unsigned int uint;
//转换函数
//Temp 字符型数组
//pOut int型数组
//length 字符型数组的长度
//这里假设字符型数组里包含的都是偶数个元素
//如果是奇数个数,则需要增加如下处理:
//检查length是否是奇数,如果是,动态分配length+1个char大小的数组
//数据全部清零,并且把Temp的内容拷贝到动态分配的数组中
//按照下面长度是偶数的情况处理
//释放动态分配的内存
//这里根据问题要求,应该是以小端序来存放int类型的
//如果更智能一些,可以写一个检查字节序的函数来处理
void Exchange(const uchar *Temp, uint *pOut, uchar length)
{
int i = 0;
for (; i < length / 2; i++)
{
//小端序,直接按原来的顺序拷贝过去
//如果是大端序,则可以改变一下字节序
memcpy(pOut, Temp, 2);
pOut++;//int型指针后移一位
Temp+=2;//字符型字节后移两位
}
}
//测试代码
int main(void)
{
int i;
uint array[20] = {0};
uchar Start[] = {0x80,0xF1,0x58,0x03,0xC1,0xEA,0x8F,0x06};
Exchange(Start, array, sizeof(Start));
for (i = 0; i < 20; i++)
{
if (array[i] != 0)
{
printf("0x%04X ", array[i]);
}
}
printf("\n");
return 0;
}
输出截图:
热心网友
时间:2023-10-15 08:51
其实可以不转换,用指针访问即可,比如你的例子:
short int *array=(short int *)Start;
则printf("%x %x %x %x\n",array[0],array[1],array[2],array[3]);得到的结果就是
F180 0358 EAC1 068F
热心网友
时间:2023-10-15 08:51
void Exchange(uchar *Temp, uchar length, uint *pout)
{
int i;
uchar *p;
p = (uchar*)pout;
for (i = 0; i < length; i++)
{
p[i] = Temp[i];
}
//memcpy(pout, Temp, length); //效率更高
//必须考虑 length 为奇数时的情况
if (length % 2)
p[i] = 0;
}
热心网友
时间:2023-10-15 08:50
#include <stdio.h>
#include <string.h>
typedef unsigned char uchar;
typedef unsigned int uint;
//转换函数
//Temp 字符型数组
//pOut int型数组
//length 字符型数组的长度
//这里假设字符型数组里包含的都是偶数个元素
//如果是奇数个数,则需要增加如下处理:
//检查length是否是奇数,如果是,动态分配length+1个char大小的数组
//数据全部清零,并且把Temp的内容拷贝到动态分配的数组中
//按照下面长度是偶数的情况处理
//释放动态分配的内存
//这里根据问题要求,应该是以小端序来存放int类型的
//如果更智能一些,可以写一个检查字节序的函数来处理
void Exchange(const uchar *Temp, uint *pOut, uchar length)
{
int i = 0;
for (; i < length / 2; i++)
{
//小端序,直接按原来的顺序拷贝过去
//如果是大端序,则可以改变一下字节序
memcpy(pOut, Temp, 2);
pOut++;//int型指针后移一位
Temp+=2;//字符型字节后移两位
}
}
//测试代码
int main(void)
{
int i;
uint array[20] = {0};
uchar Start[] = {0x80,0xF1,0x58,0x03,0xC1,0xEA,0x8F,0x06};
Exchange(Start, array, sizeof(Start));
for (i = 0; i < 20; i++)
{
if (array[i] != 0)
{
printf("0x%04X ", array[i]);
}
}
printf("\n");
return 0;
}
输出截图:
热心网友
时间:2023-10-15 08:51
其实可以不转换,用指针访问即可,比如你的例子:
short int *array=(short int *)Start;
则printf("%x %x %x %x\n",array[0],array[1],array[2],array[3]);得到的结果就是
F180 0358 EAC1 068F
热心网友
时间:2023-10-15 08:51
void Exchange(uchar *Temp, uchar length, uint *pout)
{
int i;
uchar *p;
p = (uchar*)pout;
for (i = 0; i < length; i++)
{
p[i] = Temp[i];
}
//memcpy(pout, Temp, length); //效率更高
//必须考虑 length 为奇数时的情况
if (length % 2)
p[i] = 0;
}