2013-03-23 26 views
1

我得到一個短期價值(可能僅限於UINT8),並且想將其分配給UINT8(/ unsigned char)。
但我認爲沒有更好的選擇,但要做到這一點:給數組中的一個unsigned char分配一個short值的結果是什麼?

unlatch.FaultBits.Value[0] = ui->lineEditFaultBits->text().toShort(); 

但,這達到我想要的東西,當我使用unlatch.FaultBits.Value[0]? (Vaule []是一個結構中的數組:UINT8 Value[64];

+0

結果是您將整數的低8位分配給字符。 – 2013-03-23 02:04:59

+5

不知道你擔心什麼,但我可以確認這不會破壞內存(不會改變Value [1])。在分配之前它將簡單地縮短值(取最低位字節)。 – Dave 2013-03-23 02:05:11

+2

它不會「取最低位字節」。它將模256的值減小到[0,255]的範圍內。如果原始(帶符號)值以二進制補碼錶示,則這兩個操作僅相同。 – 2013-03-23 02:45:04

回答

1

這可以實現你想要的嗎?那麼,我可以假設四種途徑之一,因爲你沒有告訴我們你想要什麼(抱怨)。

  1. 希望將short值賦給一個uint8_t,而無需簽署對無符號的轉換。在這種情況下,您必須確保舊值在uint8_tassert(old_value >= 0 && old_value <= 255);的範圍內。如果這一點描述了你所期望的行爲,並且斷言失敗了,那麼不,你的代碼不會做你想要的。
  2. 您想要爲uint8_t指定可能爲負數或超出範圍的short值,並且您在其評論中未看到與縮小處理R有關的問題。如果這一點描述了你所期望的行爲,那麼是的,你的代碼做到了你想要的。
  3. 您想要將一個可能爲負數或超出範圍的short值分配給uint8_t,並且其評論中描述的縮小處理R對您不起作用,但您準備在代碼中表達自己的縮減算法。如果這一點描述了你想要的行爲,那麼不,你還沒有表達你的自定義簡化算法。
  4. 您想要爲uint8_t指定可能爲負數或超出範圍的short值,並且您不希望要降低該值。在這種情況下,uint8_t是不合適的。選擇不同的類型。
相關問題