我正在編寫一個程序來創建ICC顏色格式。這些格式指定一個名爲s15Fixed16Number的數據類型,它具有一個符號位,15個整數位和16個小數位。 IEEE 754 32位浮點數有一個符號位,8個指數位和23個小數位。如何將float轉換爲非標準編碼
我需要從文本框中獲取輸入,並將它們轉換爲s15Fixed16Number。一些搜索在谷歌的書籍上出現this,但那是在談論將十進制數轉換爲s15Fixed16Number。我想我可以使用鏈接中解釋的方法,但是我還沒有做任何測試來確定這將是多麼準確。我想我也可以嘗試從文本框中轉換字符輸入,但我還沒有想過那麼多。
我正在使用可可,但我不認爲這很重要;任何C函數都可以工作。以下是s15Fixed16Number格式一些示例值:
-32768.0 = 0x80000000
0 = 0x00000000
1.0 = 0x00010000
32767 + (65535/65536) = 0x7FFFFFFF
我想這是一段時間以來該數值計算類!
如果示例轉換正確,那麼s15Fixed16Number沒有符號位: - 它只是標準二進制補碼簽名編碼。例如-32768.0 = 0x80000000意味着:-1.0 = 0xffff0000 – 2010-08-30 05:52:24
這由ICC配置文件格式規範備份,該規範聲明s15Fixed16Number:「這種類型表示具有16個小數位的固定帶符號4字節/ 32位 位數」。它沒有說它有一個符號位,但是這個數字是有符號的。 – 2010-08-30 05:58:47
該標準給出了一個編碼爲s15Fix16Number的負數的示例(假),值爲-32768.9999。這顯然超出了有效範圍。不清楚-1應該被編碼爲什麼;不清楚最小有效編碼值是多少(-32768.00000或-32767.99999)。附錄中標題中使用的類型是:'typedef long icS15Fixed16Number;'。 – 2010-08-30 06:05:50