将整数插入char数组

时间:2015-12-28 19:44:17

标签: c++ arrays binary

我有以下char数组:

char* a = new char[6]{0};

二进制是:

00000000 00000000 00000000 00000000 00000000 00000000

我也有一个整数:

int i = 123984343;

二进制是:

00000111 01100011 11011001 11010111

我想将这个4字节整数i插入char数组a,从位置[1]到位置[4],以便原始数组{{1成为:

a

最快捷,最简单的方法是什么?

3 个答案:

答案 0 :(得分:3)

使用copy算法和强制转换来访问基础字节序列:

#include <algorithm>
#include <cstdint>

std::uint32_t n = 123984343;
char * a = new char[6]{};

{
    const char * p = reinterpret_cast<const char *>(&n);
    std::copy(p, p + sizeof n, a + 1);
}

在这种情况下,我假设您保证整数的字节实际上是您所声称的。这是依赖于平台的,并且整数通常可以以不同方式布局。也许代数操作更合适。您仍然需要考虑char中的位数;如果支持uint8_t,则以下代码有效:

std::uint8_t * p = reinterpret_cast<std::uint8_t *>(a);
p[1] = n / 0x1000000;
p[2] = n / 0x0010000;
p[3] = n / 0x0000100;
p[4] = n / 0x0000001;

答案 1 :(得分:3)

您可以使用

解决问题
    memcpy( &a[1], &i, sizeof(i) );

但我向甜甜圈打赌,这不是解决问题的最佳方式。

    for (size_t ix = 0; ix < 4; ix++)
    {
        a[1+ix] = (static_cast<unsigned int>(i) >> (8*ix)) & 0xff;
    }

是一种安全的方法,可以将符合四个字节的int序列化为字符数组。无论是这个目的还是另一端,都不得做出不可移植的假设。

我不相信即使这是解决实际问题的最佳方法(但如果没有更多信息,很难分辨)。

答案 2 :(得分:0)

如果int是4个字节,则将int复制到char数组中第2个位置的地址。

int i = 123984343;  
char* a = new char[6]{0};   
memcpy(a+1, &i, sizeof(i));