2016-06-30 46 views
5

我試圖複製this但它不會編譯。C++無符號簽名

unsigned char x = 0; 
reinterpret_cast<signed char>(x); 

它說

C:\Users\SXG5558\Documents\Arduino\sketch_jun30a\sketch_jun30a.ino: In function 'void setup()': 

sketch_jun30a:3: error: invalid cast from type 'unsigned char' to type 'signed char' 

    reinterpret_cast<signed char>(x); 

            ^

exit status 1 

編輯:

要清楚,我確實想在內存中,重新詮釋位從符號到無符號。我正在編寫一個讀取和寫入未簽名數據的I2C庫,但是我正在使用該庫來控制已簽名的傳感器,因此我想重新解釋投射實際數據。

+7

你鏈接的例子有'reinterpret_cast (x);'。注意'&' – user463035818

+1

是不是您的問題標題只是要求您的代碼中顯示的相反投射方向? –

+0

只需使用nuke-it(signed char)x' cast。 – pm100

回答

5

相關部分從cppreference.com

類型的混疊

當指針或引用對象,其動態類型是DynamicType是的reinterpret_cast(或C樣式轉換)到一個指針或引用對象不同類型的AliasedType,轉換總是成功的,但如果以下情況之一成立,則生成的指針或參考可能僅用於訪問該對象:

[...]

  • AliasedType是(可能CV修飾)簽署或DynamicType

的無符號的變體[...]

即您從鏈接的例子中忘記了&

+1

我不能相信我錯過了那個。謝謝你回答一個愚蠢的問題。 – charmoniumQ

+0

@Sam其實並不是這樣一個愚蠢的問題。我需要一些時間來理解爲什麼沒有'&'它不起作用,我仍然無法解釋它... – user463035818

+0

我認爲這是正確的分配(例如'reinterpret_cast (x)= 10') 。這引出了一個問題,如果你不想要這個功能呢?如何在不將f()的結果賦值給一個臨時變量的情況下強制轉換'reinterpret_cast (f())'。 – charmoniumQ