[英]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 位)。 您應該將字節讀取為char
或std::byte
數組。 然后,您可以以安全且可移植的方式交換這些值。 以可移植的方式將這些字節轉換為數字類型是不可行的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.