2011-02-07 44 views
3

我需要將Int32值轉換爲3字節(24位)整數。字節順序保持不變(很少),但我無法弄清楚如何正確移動標誌。值已經被限制在適當的範圍,我只是無法弄清楚如何將4個字節轉換爲3.使用C#4.0。這是爲了硬件集成,所以我必須有24位值,不能使用32位。將Int32轉換爲24位有符號整數

+0

你打算存儲的24位整數什麼類型的? – 2011-02-07 06:17:31

+0

一個字節數組就好了。我將通過一個串行連接輸出3個字節,所以只要我能將它們轉換成字節,我就可以走了。 – drharris 2011-02-07 06:18:44

+0

第三行不會做任何事情(`i&0xffffff`總是正數)。此外,您可能想要遵循Joe的答案的第二部分,該答案適用於具有不同字節順序的系統;你現在的代碼將會工作,但是如果你嘗試在PowerPC或MIPS上運行它,將會以不同尋常的方式破解。 – 2011-02-07 07:08:39

回答

1

如果你想要做這種轉換,只需刪除四字節數字的頂部字節。補碼錶示法將正確處理符號。如果你想保留一個Int32變量的24位數字,你可以使用v & 0xFFFFFF來得到低24位。我看到了你對字節數組的評論:如果你在數組中有空間,寫下數字的全部四個字節,然後發送前三個字節;儘管這是小端系統特有的。

2

發現這一點:http://bytes.com/topic/c-sharp/answers/238589-int-byte

int myInt = 800; 
byte[] myByteArray = System.BitConverter.GetBytes(myInt); 

聽起來像你只需要得到數組的最後3個元素。

編輯:

耶利米指出的那樣,你需要做的是這樣

int myInt = 800; 
byte[] myByteArray = System.BitConverter.GetBytes(myInt); 

if (BitConverter.IsLittleEndian) { 
    // get the first 3 elements 
} else { 
    // get the last 3 elements 
} 
相關問題