若要在 Android 上將文字轉換為十六進位,請在手機的瀏覽器中開啟 Text To HEX 工具,將您的文字貼上或輸入到輸入欄位中,選擇三種輸出格式之一(連續位元組,例如 4869;以空格分隔的位元組,例如 48 69;或帶 0x 前綴的標記,例如 0x48 0x69),點選編碼,然後複製產生的十六進位字串。此工具完全在目前的瀏覽器分頁中使用瀏覽器的 TextEncoder API 執行,因此不需要安裝專屬的十六進位轉換應用程式,也不會將您的文字或十六進位輸出上傳到伺服器。編碼會在 Android 用於網路傳輸的同一組 UTF-8 位元組流上運作,這與 Java 程式碼在內部儲存時使用的 UTF-16 表示方式不同,因此您看到的十六進位正是 Android 在您的應用程式呼叫 String.getBytes(StandardCharsets.UTF_8) 並以相同方式格式化該位元組陣列時會送出的內容。

選擇瀏覽器編碼器而非 Android 十六進位應用程式
Android 預設就搭載了功能完善的瀏覽器,因此特地尋找獨立的十六進位轉換應用程式只會增加操作上的麻煩,卻沒有帶來實質的功能提升。基於瀏覽器的編碼器消除了行動裝置上常見的三個問題:
- 權限蔓延。免費的「十六進位」工具經常會要求存取儲存、網路或聯絡人等它們實際上不需要的權限。Text To HEX 工具只會讀取您貼到輸入欄位中的文字,並只會寫入您複製出來的結果,因此沒有額外的權限需要授予,即使完全沒有開啟任何權限,該頁面依然可以使用。
- 廣告軟體與追蹤器。Play Store 上的工具類應用程式經常透過 aggressive 廣告或背景 SDK 來營利,即使離開畫面仍會持續執行。在目前分頁中本機執行的工具沒有廣告庫存,也沒有持續的處理程序來監視您,如果您打算貼上權杖、裝置 ID 或其他敏感字串,這點尤其重要。
- 儲存空間與更新。十六進位工具在使用完當下的任務後往往會閒置,接著不斷跳出更新通知並在背景佔用記憶體。網頁工具的書籤或主畫面捷徑隨時可用,卻不會佔用儲存空間或更新頻寬,如果您想要完整瞭解為什麼「不上傳」是 Android 的正確預設,可以閱讀 瀏覽器式文字轉十六進位的隱私指南。
在您的 Android 手機上設定編碼器
在您轉換第一個字串之前,請花一分鐘準備好頁面,以便隨時取用:
- 開啟手機的瀏覽器並前往 Text To HEX 頁面。
- 從瀏覽器選單中選擇新增到主畫面或新增頁面捷徑,以建立一個一鍵啟動的圖示。瀏覽器會像儲存其他應用程式圖示一樣儲存它,點選該圖示即可直接開啟工具,不需要每次都重新輸入網址。
- 如果您打算複製較長的十六進位字串,請將手機旋轉為橫向。橫向模式提供更多的水平空間來選取帶 0x 前綴的輸出,並降低因誤觸而只複製到部分結果的機率。
- 如果您的貼上內容可能包含舊的片段,請在編碼工作階段期間停用全系統的剪貼簿紀錄。當輸入內容包含像 API 權杖或密碼這類機密資料時,這個步驟雖然非必要,但很有用,因為部分 Android 皮膚會在不同的應用程式之間保留剪貼簿內容。
您也可以將工具保持在背景分頁中開啟,從其他應用程式蒐集到文字後再切換回去,因為編碼器不需要在兩次編碼呼叫之間持續掛載,只有在您點選編碼時才會重新整理結果。
在您的 Android 裝置上將文字轉換為十六進位
頁面載入後,整個工作流程只需要幾次點選:
- 點選輸入欄位內部,輸入您的文字,或透過鍵盤上方出現的系統剪貼簿選單從其他 Android 應用程式貼上。
- 從三種輸出格式中擇一——連續配對、以空格分隔的配對,或 0xNN 標記——並選擇小寫或大寫的十六進位數字。每種格式呈現的都是同一組底層位元組,差別只在於顯示方式。
- 點選編碼動作。結果面板會顯示 UTF-8 位元組數、格式化後的輸出長度,以及若有孤立的 UTF-16 代理碼位在編碼過程中被替換為 U+FFFD 時所顯示的警告。
- 長按輸出,從 Android 選取工具列選擇全選,然後點選複製。完整格式化後的字串現在已位於 Android 剪貼簿中,可以貼到 Android Studio、Logcat、筆記應用程式或開發人員聊天視窗中。
如果您在編碼後變更輸入內容、格式或字母大小寫,結果面板會自動清除,位元組統計也會重設,且先前的複製狀態會被取消,因此您絕不會貼到來自先前編碼的過期結果。
挑選符合您 Android 工作流程的十六進位格式
這三種格式是對同一組位元組陣列的呈現選擇,而 Android 程式碼、logcat 輸出和說明文件各自傾向於期待特定的形式:
| 格式 | 「Hi」的範例 | 在 Android 上的最佳用途 |
|---|---|---|
| 連續配對 | 4869 | 緊湊儲存、酬載欄位、精簡的日誌行 |
| 以空格分隔的配對 | 48 69 | 說明文件、易讀的差異比對、人工檢查 |
| 帶 0x 前綴的標記 | 0x48 0x69 | 貼到原始碼檔案、除錯器檢視、位元組陣列 |
切換格式或變更字母大小寫永遠不會改變編碼後的 UTF-8 位元組,但會改變格式化後的輸出長度。連續形式最短,間距形式會在每對位元組之間插入一個 ASCII 空白,而帶 0x 前綴的形式會將每個位元組寫成 0xNN,並在每個標記之間加入一個空白。第一個標記之前和最後一個標記之後都不會加上分隔符號,因此當字串透過 Hex to Text Converter 反向解析時,邊界仍可預測。
UTF-8 位元組大小在 Android 文字上的呈現
UTF-8 是一種可變長度編碼,而 Android 文字經常混用多種文字系統,因此位元組數很少等於字元數。編碼器遵循編碼標準所定義的相同位元組寬度:
| 字元類別 | 範例純量 | UTF-8 位元組 | 十六進位輸出 |
|---|---|---|---|
| ASCII | U+0041 A | 1 | 41 |
| 常見拉丁字母 | U+00E9 é | 2 | c3a9 |
| 大多數 BMP 字元 | U+4F60 你 | 3 | e4bda0 |
| 輔助平面字元 | U+1F600 😀 | 4 | f09f9880 |
因此,一則混合了 ASCII 與 emoji 的簡短 Android 推播通知,所耗費的位元組數可能遠多於其可見字元數,這在您估算封包酬載大小,或將十六進位輸出與您在 Wireshark 擷取中觀察到的線路上大小進行比較時非常重要。兩個十六進位數字永遠代表一個位元組,因此單一中文字元在連續格式中會產生六個十六進位數字,emoji 則是八個,依此類推。準確的位元組寬度已在 MDN TextEncoder 參考資料 中記載,並由 WHATWG UTF-8 編碼器規範所定義。
Android 上的限制、警告與邊界情況
編碼器會套用兩項硬性限制,並在開始格式化之前回報:
- 輸入最多只能包含 1,000,000 個 UTF-16 碼位。只要多出一個就會遭到拒絕並顯示明確的訊息,因此此工具絕不會在手機上靜默地截斷您的文字。
- 格式化後的輸出最多只能包含 4,999,999 個 UTF-16 碼位。正好一百萬個 ASCII 輸入字元以帶 0x 前綴的格式輸出時,會刻意觸及這個上限。
- 若詳細格式中的多位元組 Unicode 在用盡輸出預算前就已達上限,工具會回報此失敗,而不是切換格式、切割位元組、捨棄尾段或抽樣內容。
在 Android 裝置上進行編碼時,還有一些值得瞭解的行為:
- 不會加上 BOM。TextEncoder 不會在開頭加上 UTF-8 位元組順序標記,因此一般輸入的輸出會直接以第一個字元的位元組開始。輸入中若包含內部的 U+FEFF,會被當成資料編碼,產生 EF BB BF,而不會被視為中繼資料標記。
- 孤立的代理項會被替換。JavaScript 字串採用 UTF-16,而孤立的高或低代理項並不是有效的 Unicode 純量。每個孤立的代理項在編碼前都會被替換為 U+FFFD,產生 EF BF BD,結果面板會計算並明顯地對每一次替換發出警告。
- 不執行正規化。編碼器不會套用 Unicode 正規化、換行轉換、修剪、大小寫轉換、跳脫字元解析或區域設定相關的改寫。例如由 e 加上 U+0301 組成的組合序列會保持分解狀態(65 CC 81),而不會被合併為 U+00E9。
- NUL 位元組會原樣通過。U+0000 會變成位元組 00,行尾會依照您提供的順序保留,其他資料不會被視為結束符。
略過這些 Android 特有的捷徑
有幾個看似專屬於 Android 的捷徑,實際上並不比在瀏覽器中執行編碼器來得更安全或更快速:
- 對單一字元使用 Integer.toHexString。
- 呼叫 getBytes(StandardCharsets.UTF_8) 但不進行格式化。Java 在 Android 上會回傳原始的位元組陣列;若沒有逐位元組的十六進位轉換與選擇的分隔符號,結果將難以閱讀,且在貼到聊天視窗或問題單時很容易與二進位資料混淆。
- 將十六進位視為安全措施。十六進位是一種顯示編碼,既不是加密、雜湊、壓縮,也不是機密保護。只要擁有位元組和 UTF-8 規則,任何人都能還原出格式正確的文字,因此即使此頁面是在裝置本機上執行,也請勿將工具輸出用來隱藏權杖、密碼或個人資料。