我想將一個常量聲明爲Word類型的16位整數併爲其分配一個值。爲了支持大端和小端平臺之間的可移植性,我不能安全地使用像這樣的分配:Ada83在聲明中未經檢查的記錄轉換
Special_Value : Constant Word := 16#1234#;
因爲字節順序可能被誤解。
所以我使用了一個記錄是這樣的:
Type Double_Byte Is Record
Byte_1 : Byte; -- most significant byte
Byte_0 : Byte; -- least significant byte
End Record;
For Double_Byte Use Record
Byte_1 At 0 Range 0..7;
Byte_0 At 0 Range 8..15;
End Record;
然而,在某些情況下,我有大量的預配置任務的看起來像這樣:
Value_1 : Constant Word := 15#1234#;
這是非常一個人可讀,但endian問題導致它被誤解了許多方法(例如在調試器中)。
因爲我有很多行,我這樣做,我嘗試了以下,因爲它是相當緊湊的源代碼。這是工作,但我不知道爲什麼,或者是什麼的Ada參考手冊的部分涵蓋這一概念:
Value_1 : Constant Word := DByte_To_Word((Byte_1 => 16#12#,
Byte_0 => 16#34#));
其中DByte_To_Word被定義爲
Function DByte_To_Word Is New Unchecked_Conversion(Double_Byte, Word);
我想我已經看到一些在ARM允許我這樣做,但不是我上面描述的方式。我找不到它,我不知道我會尋找什麼。