[英]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.