C语言 char型数组拼接问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 char型数组拼接问题相关的知识,希望对你有一定的参考价值。

有两个数组 比如说char a =[0x1 0x2] char b=[0x3 0x4] 我想得到一个char数组 char c=[0x13 0x24] 该怎么做?

参考技术A char* joint_array(char *s1,char *s2, int len)


int i;
for(i=0;i<len ;i++)
s1[i] = (s1[i]<<8) | s2[i];
return s1;

怎样把char型数组转存为int型数组?

如:字符型数组 uchar Start [7] = 0x80,0xF1,0x58,0x03,0xC1,0xEA,0x8F,0x06; 转存为
int型数组uint array[4] = 0xF180,0x0358,0xEAC1,0x068F;
此外,这需要C语言中进行处理;该char型数组中的元素个数不是固定的,希望通过一个函数对这两个数组进行转换,如void Exchange(uchar *Temp,uchar length)。欢迎大家帮我处理一下,谢谢!

#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;

输出截图:

参考技术A 其实可以不转换,用指针访问即可,比如你的例子:
short int *array=(short int *)Start;
则printf("%x %x %x %x\n",array[0],array[1],array[2],array[3]);得到的结果就是
F180 0358 EAC1 068F
参考技术B 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;

以上是关于C语言 char型数组拼接问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言 怎么把char型附加在字符串的后面?

c语言里怎么把float转换为char型?

C语言字符串拼接函数:strcat()

C语言qsort函数对char型str[m][n]数组的排序

c中char型数组结束符赋值问题

C语言中char数组与char指针问题