簡體   English   中英

從無符號到有符號的便攜式轉換 C++

[英]Portable conversion from unsigned to signed in C++

我有std::vector<unsigned short int> vals ,我需要反轉字節的順序(假設為 2)並將它們存儲為short int 我這樣做是:

std::vector<short int> result;
for(unsigned short int& x : vals) {
    x = ((x << 8) | (x >> 8));
    result.push_back(static_cast<short int>(x));
}

在線閱讀,我發現static_cast具有實現定義的行為。 我還找到了std::bit_cast ,它保留了這些位並以新類型解釋它們。

這是否意味着使用上面的std::bit_cast<short int>(x)應該優於static_cast

我試過了,兩者都給了我相同的結果。 假設bit_cast會給使用我的代碼的其他人提供相同的結果,而static_cast可以給他們不同的結果是否正確?

如果您想處理字節 - 您不應該將它們轉換為非字節類型(尤其不是short int和朋友,因為它們不需要完全是 16 位)。 您應該將字節讀取為charstd::byte數組。 然后,您可以以安全且可移植的方式交換這些值。 以可移植的方式將這些字節轉換為數字類型是不可行的。

暫無
暫無

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

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