有時候我們會需要查看一個檔案(尤其是binary檔案的時候)的各個byte到底寫了什麼,這時後就可以用od這個指令來把檔案一個一個byte地顯示出來
od -c filename.bmp >> od.txt
上面是將一個bmp檔案經過od的解析後,將結果寫進od.txt中。寫進txt檔是因為通常這個output會很大,如果terminal不允許顯示這麼長的output的話,會無法一次看完全部。
參數c在man page的解釋是"select printable characters or backslash escapes",已經講解得很清楚了,如果是ASCII的話會顯示字元或是帶有反斜線的跳脫字元,但一個byte換成十進位的話可以代表0到255,而ASCII只用了0到127而已,所以剩下的無法部分,od會將它轉換成八進位的三位數,例如212代表的就是2x8^2+1x8+2=138,也就是十進位的138,又例如012代表的就是十進位的10。所以我們可以知道這邊這個三位數最多只到377,也就是十進位的255
而od.txt每一行的左邊會有該行的行數,更正確的說是該行的offset,也就是該行在這份檔案中,它的前面有幾個byte的意思。而他的單位是八進位的數字,例如0000040代表的就是這一行的前面有4x8=32個byte。
最後,od.txt的內容中會出現 * 符號,它代表的是與前面那行的內容相同,所以若有相同的很多行的話,可以用一個 * 來代表,就可以省略很多冗余的output。
0000000 B M J 3 003 \0 \0 \0 \0 \0 212 \0 \0 \0 | \0
0000020 \0 \0 \f 002 \0 \0 d \0 \0 \0 001 \0 \0 003 \0
0000040 \0 \0 300 2 003 \0 % 026 \0 \0 % 026 \0 \0 \0 \0
0000060 \0 \0 \0 \0 \0 \0 \0 \0 377 \0 \0 377 \0 \0 377 \0
0000100 \0 \0 \0 \0 \0 377 B G R s 200 302 365 ( ` 270
0000120 036 025 205 353 001 @ 3 3 023 200 f f & @ f
0000140 f 006 240 231 231 \t < \n 327 003 $ \ 217 2 \0 \0
0000160 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 004 \0 \0 \0 \0 \0
0000200 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 365 365 365 377 365 365
0000220 365 377 365 365 365 377 365 365 365 377 365 365 365 377 365 365
*
0035300 365 377 365 365 365 377 365 365 365 377 365 365 365 377 370 370
0035320 370 377 373 373 373 377 373 373 373 377 370 370 370 377 365 365
0035340 365 377 365 365 365 377 365 365 365 377 373 373 373 377 354 354
0035360 354 377 370 370 370 377 376 377 377 377 362 362 362 377 365 365
0035400 365 377 377 377 377 377 362 362 362 377 365 365 365 377 365 365
0035420 365 377 365 365 365 377 365 365 365 377 365 365 365 377 365 365
*
0035760 365 377 362 362 362 377 357 357 357 377 357 357 357 377 357 357
0036000 357 377 362 362 362 377 362 362 362 377 365 365 365 377 365 365
0036020 365 377 365 365 365 377 365 365 365 377 365 365 365 377 365 365
IEEE 754有一個半精度的浮點數,叫Half-precision floating-point format 通訊的時候數值的部分常會用到,因為他是最小的浮點數,好用 Go的float16 package 我有一個專案有用到這個 https://github.com/x448/float16 不錯用,推推 online float16 calculator 要做確認的時候還是會需要計算一下,查到這個網站
Sep 2, 2022其實一直不想做RecyclerView的筆記,因為網路上資源太多了,但每次要用的時候都還要花個幾分鐘回憶一下這東西到底在幹嘛,實在是浪費時間,所以這篇從程市結構上簡單講一下,讓下次要用到RecyclerView的時候可以快速恢復記憶。 程式結構 以下重點式地說一下哪些地方要寫東西: Activity/Fragment的class attribute要新增 一個RecyclerView: 用來接收recyclerview的UI widget,並用它來設定好recyclerview背後的程式邏輯。
Sep 5, 2020先來講一點廢話,講一下為啥我會開始用ViewModel。 以前我寫single activity application還沒有用navigation的時候,都是自己寫個listener的interface用observer pattern來實現activity和fragment的溝通。我記得這其實是原本官方建議的方式,但我現在找不到了,記得好像蠻硬性地規定要有個callback method叫做onFragmentInteraction(uri: Uri)來做activity跟fragment的溝通。observer pattern的方式我用了很久,直到後來因為覺得各個fragment之間的轉換用寫的實在是有點亂,就用了navigation,沒想到一試成主顧,真的太好用而且很簡單(我就不特別筆記navigation了因為官方教學十分清楚,照著做就好),但用了navigation後,整個MainActivity的程式架構變了很多,也讓我重新思考activity、fragment和service之間到底要怎麼溝通比較好,於是讓我有這個機會試著用用看ViewModel和LiveData。然而它們就跟navigation一樣,太好用又太簡單了,用完之後回不去了。 所以這篇筆記所寫的可能跟一般大家常用ViewModel和LiveData的理由不同,一般是拿來存取UI元件的資料用的,而我這邊想講一下怎麼用ViewModel和LiveData來取代Observer pattern來做activity和fragment之間(fragment和fragment之間也可以)的溝通,而且相較之下是一個更好用更簡單的方案。 基本介紹 ViewModel ViewModel是一個用來把資料跟activity、fragment等view類型的元件分離的東西,而且它的lifecycle比activit和fragment的還要長,是一個很適合放資料的地方。它的存在跟一個叫做MVVM的design pattern有很大的關係。主要就是view跟model之間,有了這個viewmodel來讓資料的取得與更新有一個獨立的地方來專門處理。
Aug 20, 2020App除了使用者看得到可互動的foreground部分之外,很多時候會用到background的運算,例如Google drive透過網路進行檔案的上傳下載、Line的即時訊息等等都是要在背景執行或是待命的。這篇會基本地介紹一下background processing的部分有哪些常用機制可以用,然後主要介紹其中兩個,第一個不外乎就是App四大component之一的Service,另一個是API 28出現的WorkManager。 官方建議的background processing方案 其實官方有文章來講解這個部分,這邊簡單重點整理一下,詳細內容可以去看官方的文章。 官方把背景的工作分成三種 Immediate Deferred Exact
Aug 10, 2020or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up