2012-09-05 45 views
1

二進制文件位可以閱讀使用f:read(size)其中大小代表字節的數量,但我怎麼一點閱讀位字節的二進制文件字節?(字節,或者如果你想八位的1/8)LUA - 讀取位

這是確定的,大部分數據INT8(1),標記Uint16(2),UINT32(4),詮釋*(4) 但對於BOOL(0.125 ?)。

感謝您的幫助!我的問題顯然不是讀一點一滴的文件,而是設法提取所有的數據,包括一些布爾值(不會產生1位的「移位」)。

+0

只讀字節並從它們分析位。如果您提供有關數據結構的更多詳細信息,人們可以提供更詳細的答案。 –

回答

1

你不能。字節是可以從文件讀取的最小單位。您可以編寫包裝按字節訪問的代碼,使其看起來按位。

從文件讀取布爾值的適當方式取決於它是如何寫入的。除非你遇到同樣的麻煩來一點一點寫布爾值,否則就不需要這樣讀取布爾值。

Lua文件API只處理數字和字符串。要寫一個布爾值,你可以將它轉換爲這些類型之一。要閱讀它,您可以閱讀其中的一種類型,並執行與用於書寫的轉換相反的內容。例如,您可能將true轉換爲1false0,然後寫入和讀取數字。或者你可能試圖將幾個布爾值打包成一個數字。在任何情況下,您都不需要逐位讀取或寫入文件來讀取和寫入布爾數據。

+0

如果您想成爲技術人員,則無法從文件中讀取字節。你一頁接一頁地閱讀它們,當你只需要一個字節時,你就可以緩衝頁面。 –

+2

@NicolBolas:事實並非如此,因爲內核提供了1字節分辨率的'read'和'write'函數,並以字節爲單位維護文件的大小。 – finnw

+0

「你可以編寫包裝字節訪問的代碼,使其看起來按位。」 這正是我要找的。你能幫助我嗎? – 4nti7rust