繁体   English   中英

在C中将int拆分为char数组

[英]Split int into char array in C

我有一个 int,我需要将它拆分为一个字符数组,因此每个数组位置有 2 个字符。 之后,我需要做相反的过程。 这是我能想到的最好的方法,但我仍然无法让它发挥作用。 有什么建议?

#include <stdio.h>
#include <stdlib.h> 
int main()
{
    int length = 10968;
    int bytesNeeded = sizeof(length) / 2;
    char *controlPacket = (char*)malloc(sizeof(char*)*bytesNeeded);
    for (int i = 0; i < bytesNeeded; i++)
    {
        controlPacket[i] = (length >> (8* i));
    }
    int newSize = 0;
    for (int i = 0; i < bytesNeeded; i++)
    {
        newSize += (controlPacket[i] << (8 * i));
    }
    printf("Newsize is: %d\n", newSize);
}

将您正在执行按位运算的变量更改为unsigned ,并在分配给数组之前屏蔽移位结果。 否则,你会溢出,这会导致错误的结果(可能是未定义的行为,我不确定)。

您也不应该将sizeof(length)除以 2。它适用于仅使用数字的低位一半的值,但不适用于较大的值; 例如,如果您使用length = 1096800; 结果将是48824

#include <stdio.h>
#include <stdlib.h> 
int main()
{
    unsigned int length = 10968;
    int bytesNeeded = sizeof(length);
    unsigned char *controlPacket = malloc(sizeof(unsigned char)*bytesNeeded);
    for (int i = 0; i < bytesNeeded; i++)
    {
        controlPacket[i] = (length >> (8* i) & 0xff);
    }
    unsigned int newSize = 0;
    for (int i = 0; i < bytesNeeded; i++)
    {
        newSize += (controlPacket[i] << (8 * i));
    }
    printf("Newsize is: %d\n", newSize);
    free(controlPacket);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM