2015-07-01 30 views
1

我正在嘗試爲特定文件格式的UNIX工具「文件」創建一個神奇的數據庫文件。我已經閱讀了整本手冊(man magicman file),但沒有找到一種方法來輸出一個24位的大端碼。我只找到了8位(字節),16位(beshort),32位(屬)和64位(bequad)。魔法文件:打印一個3字節的大端值?

有沒有辦法從一個特定的「魔力文件命令」文件打印24位(3字節)大端整數?

+0

只需計算三個字節,並按照適當的順序將它們作爲1字節整數存入文件即可。 – CiaPan

+0

「將它們放入文件」是什麼意思?我沒有自己的程序,但我正在爲unix工具「文件」(http://linux.die.net/man/5/magic)寫一個「魔術」文件。 「文件」使用一個魔術文件來識別文件類型。我可以告訴工具「如果一個文件以ABCD開頭,打印一行'ABCD-file',然後打印在偏移量4找到的'long'值。」。但我想要的是打印24位,我不能「計算」,如「與65536乘以0x01和用256乘以0x02,並添加這三個值」。 –

+0

我迷路了。你是否想從文件中讀取一個3字節的整數或者將它寫入文件?你的問題和你的評論似乎表明了我的反對行爲(但這可能是由於我的英文不好)。什麼是您使用的「工具」?您是否需要將值打印爲二進制編碼或可讀的ASCII字符串? – CiaPan

回答

0

OK,我剛剛找到了一種方法來讀取file三字節值:

而不是「> 0x04訪問屬於X%d」(從打印4字節INT偏移值0x04)我使用命令「>×03 &至0x00FFFFFF屬於X%d」,其屏蔽了第一字節,因此讀取來自0x04訪問我的三個字節的值。

0

所以你想要寫一個U * X file工具magic規則。那麼,根據magic描述,則無法 - magic格式不能描述的3字節數據,因此file不能讀取它(和它沒有手段來結合一個1字節和2字節字段)。 :-(

順便說一句,我也找不到一個規則來打印出在文件中找到的魔法值 - 它僅在內部使用,以決定應印有該消息(文件類型說明),但不包括。到消息

+0

要在輸出中包含一個值,只需在輸出消息中輸入一個格式字符串,如「%s」(對於字符串)或「%d」(對於數字)。太糟糕了,沒有辦法使用三字節值。是否沒有使用這種值的「已知」文件格式,並由「文件」標識? (可能不會,大多數開發人員只會使用「int」...) –