簡體   English   中英

便攜式有符號/無符號字節轉換,C ++

[英]portable signed/unsigned byte cast,C++

我正在使用有符號到無符號字節(int8_t)轉換為打包字節。

uint32_t(uint8_t(byte)) << n

這可以在Intel Linux上使用GCC使用。 它可移植到其他平台/編譯器,例如PowerPC嗎? 有更好的方法嗎? 在我的情況下,無法使用位集。 我正在通過boost使用stdint

它不是可移植的,因為uint32_t和uint8_t類型不是C ++標准的一部分。 所有這些操作本質上都依賴於實現。

如果使用的是Boost Integer庫中的boost/cstdint.hpp ,那么可以,typedef是可移植的(跨平台的) boost/cstdint.hpp標頭用於在C ++中實現C99 stdint.h功能。

Boost文檔中

標頭提供了typedef,可用於編寫需要某些整數寬度的可移植代碼。 所有的typedef都在命名空間提升中。

實際上,是的,它很可能會在您遇到的大多數其他平台上運行(特別是如果將Boost移植到該平台上)。 但是,如果要將這些打包的值寫入文件或網絡套接字,則必須處理字節順序(您的PowerPC示例具有大尾數字節順序,而英特爾具有小尾數字節順序)。 在這方面,代碼在不同的硬件體系結構上將表現不同。

暫無
暫無

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

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