簡體   English   中英

將整數轉換為char數組,然后將其轉換回來

[英]Convert integer to char array and then convert it back

關於演員如何在C ++中工作,我有點困惑。
我有一個4字節的整數,我需要轉換為char [32],然后在其他函數中將其轉換回來。

我正在做以下事情:

uint32_t v = 100;
char ch[32]; // This is 32 bytes reserved memory
memcpy(ch,&v,4);
uint32_t w = *(reinterpret_cast<int*>(ch)); // w should be equal to v 

我在我的編譯器上得到了正確的結果,但我想確定這是否是正確的方法。

從技術上講,沒有。 如果有的話,你有可能會違反CPU的對齊規則。

您可以使用char*逐個字節地對別名進行別名,但是您無法獲取實際的char數組(無論其值來自何處)並假裝它是其他對象。

您將看到reinterpret_cast<int*>方法很多,並且在許多系統上它似乎可以工作。 但是,“正確”的方法(如果你真的需要這樣做)是:

const auto INT_SIZE = sizeof(int);
char ch[INT_SIZE] = {};

// Convert to char array
const int x = 100;
std::copy(
   reinterpret_cast<const char*>(&x),
   reinterpret_cast<const char*>(&x) + INT_SIZE,
   &ch[0]
);

// Convert back again
int y = 0;
std::copy(
   &ch[0],
   &ch[0] + INT_SIZE,
   reinterpret_cast<char*>(&y)
);

現場演示

請注意,我只假裝一個int是一堆char ,而不是相反。

另請注意,我還將memcpy替換為類型安全的std::copy (盡管因為我們正在對這些類型進行核對,這類似於by-by-by)。

暫無
暫無

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

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