簡體   English   中英

將整數插入char數組

[英]Insert integer into char-array

我有以下字符數組:

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

在二進制中是:

00000000 00000000 00000000 00000000 00000000 00000000

我也有一個整數:

int i = 123984343;

在二進制中是:

00000111 01100011 11011001 11010111

我想將此4字節整數i從位置[1]插入到位置[4]的char數組a ,以便原始數組a變為:

00000000 00000111 01100011 11011001 11010111 00000000

最快和最簡單的方法是什么?

使用copy算法和強制轉換為char來訪問基礎字節序列:

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

您可以按照要求解決問題

    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序列化為字符數組的一種安全方法。 此端或另一端都不必做出不可移植的假設。

我不認為這甚至是解決實際問題的最佳方法(但是如果沒有更多信息,很難說清)。

如果int為4個字節,則將int復制到char數組中第二個位置的地址。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM