2017-06-21 112 views
8

問題
有沒有C++工具鏈,其中std::uint8_t存在,但不一個unsigned char類型定義(或char,如果是無符號的)?基礎類型的std :: uint8_t

編輯: 相反:這樣的事情在符合標準的實現中甚至有可能嗎?

背景/動機
我主要是要求,因爲我想知道,如果std::uint8_t*可攜帶使用的訪問單個字節(就像unsigned char*)。是的,我知道std::byte,但這不相關。我主要對x86,arm和mips的工具鏈感興趣,但出於好奇,我還想知道其他例子。

+2

有些DSP只是沒有字節 - 通常它們只能以更大的字大小訪問存儲器,所以你可能有16位'char'並且沒有'uint8_t'。編輯:但重新閱讀你的問題,我發現你已經排除了這種情況(你需要'uint8_t')。 –

+2

這[twitter convo](https://twitter.com/shafikyaghmour/status/822174071412510720)和[gcc bug報告評論](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66110#c13 )可能會有所幫助,具體取決於上下文 –

+0

爲什麼不使用'unsigned char *'來可移植地訪問單個字節? – Brian

回答

1
  1. char不是無符號整型,即使是,事實上,無符號。由於uint8_t必須是無符號整數類型,它永遠不可能是char
  2. CHAR_BIT必須至少爲8,而下一個最小的標準無符號整數類型unsigned short必須至少有16位。如果存在uint8_t,則它必須是「一個寬度爲8且沒有填充位的無符號整數類型」。如果uint8_t表示標準無符號整數類型,那麼它只能是unsigned char
  3. 但是,措詞中的任何內容都不能阻止uint8_t表示實現定義的擴展無符號整數類型。但是,我不知道有這樣做的任何實現。