在Linux Shell中將十六進位制轉換為ASCII字元


簡介

如果一個數字系統以16為基數表示,則它被認為是十六進位制。在本文中,我們將學習如何在Linux Shell中將十六進位制轉換為ASCII。十六進位制系統使用數字和字母字元的組合,如下所示:

0 1 2 3 4 5 6 7 8 9 A B C D E F

大型數字系統最適合使用十六進位制數字系統,因為它可以儲存和表達長的二進位制資料。由於總共使用16個符號(數字和字母,從0到F)來表示此係統,因此它被稱為base16。

透過其字元編碼標準**ASCII**,或**美國資訊交換標準程式碼**,實現了電子通訊。因此,此標準負責在計算機和電信裝置等技術中表示文字。

例如,如果您想將使用者簡歷轉換為ASCII格式,則最終產品將是純文字,沒有任何文字樣式,例如製表符、粗體或下劃線。計算機可以快速處理這種原始格式。它還可以簡化其他應用程式匯入和/或使用最終文件。

Linux 最棒的一點是,我們只需要使用命令就能完成大部分任務。字元轉換就是一個很好的例子。

在本簡短教程中,我們將介紹幾種從命令列將十六進位制字元轉換為ASCII的方法。

用例

讓我們以以下十六進位制字元為例:

54 54 75 74 6F 72 69 61 6C 73 20 50 6F 69 6E 74 75 74 6F 72 69 61 6C 73 20 50 6F 69 6E 74

上述十六進位制字元的等效ASCII字元表示理論上為:

Tutorials Point

我們將研究幾種基於Linux的方法來達到上述解決方案。

方法1:使用printf命令

printf 命令根據指定的格式化資料格式來格式化和列印資料輸入。

我們可以使用此命令將十六進位制字元轉換為ASCII字元:

$ printf '\x54 \x75 \x74 \x6F \x72 \x69 \x61 \x6C \x73 \x20 \x50 \x6F \x69 \x6E \x74' && echo ''
$ printf '\x54 \x75 \x74 \x6F \x72 \x69 \x61 \x6C \x73 \x20 \x50 \x6F \x69 \x6E \x74' && echo '' Output: T u t o r i a l s P o i n t

在這個例子中,我們只是用 \x 格式說明符來表示十六進位制數字。

方法2:使用echo和xxd命令

xxd 命令主要用於建立取樣十六進位制字元的十六進位制轉儲,或反轉上述操作。首先,echo 命令將接收取樣十六進位制字元作為輸入,然後將其傳遞給 xxd 命令,後者將將其轉換為 ASCII 字元。

$ echo 54 75 74 6F 72 69 61 6C 73 20 50 6F 69 6E 74 | xxd -r -p && echo ''
$ echo 54 75 74 6F 72 69 61 6C 73 20 50 6F 69 6E 74 | xxd -r -p && echo '' Output: Tutorials Point

以下是命令的分解:

-r - 將十六進位制字元轉換為ASCII

-p - 將輸出以純文字格式列印

echo - 將在Linux終端上產生一個新行

方法3:使用sed命令

在列印最終輸出之前,sed 命令透過傳遞正則表示式進行轉換,用於過濾和轉換十六進位制字元輸入到 ASCII 字元。

我們使用管道來透過 echo 收集雜湊字串,透過 sed 轉換為給定的表示式,並獲得如下所示的輸出。

$ echo -n 5475746F7269616C7320506F696E74 | sed 's/\([0-9AF]\{2\}\)/\\\x\1/gI' | xargs printf && echo ''
$ echo -n 5475746F7269616C7320506F696E74 | sed 's/\([0-9AF]\{2\}\)/\\\x\1/gI' | xargs printf && echo '' Output: Tutorials Point

方法4:使用dc命令

或者,我們可以使用 dc 命令將十六進位制字元轉換為 ASCII 字元。dc 是 Desk Calculator 的縮寫。此命令接受字尾表示法的輸入。

在這種情況下,16i 表示您正在處理十六進位制基數,而 P 則列印 dc 命令的輸出。

$ echo "16i 5475746F7269616C7320506F696E74 P" | dc
$ echo "16i 5475746F7269616C7320506F696E74 P" | dc Output: Tutorials Point

由於轉換後的輸出缺少換行符,因此它與終端中的提示符混合在一起,如上所示。您可以向上面的命令新增“**echo**”以使其更易讀。

$ echo "16i 5475746F7269616C7320506F696E74 P" | dc && echo''
$ echo "16i 5475746F7269616C7320506F696E74 P" | dc && echo'' Output: Tutorials Point

方法5:使用perl命令

使用perl,我們可以輕鬆地將十六進位制資料轉換為ASCII格式。讓我們在您的Linux終端上執行以下命令。

$ echo 5475746F7269616C7320506F696E74 | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie' && echo ''
$ echo 5475746F7269616C7320506F696E74 | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie' && echo '' Output: Tutorials Point

結論

在本文中,我們研究了將十六進位制字元轉換為ASCII的幾個實際示例。我們從 printf 和 echo 命令的示例開始。然後我們執行了 dc 命令。最後,我們看到了 perl 命令的實際應用。我們可以使用這些命令來提高我們日常工作效率。這些是在Linux shell中將十六進位制轉換為ASCII字元的有效方法。

更新於:2022年11月21日

9K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.