Chuyển đổi mã ascii thành thập lục phân trong tập lệnh shell UNIX


Câu trả lời:


14

Có một printfcông cụ mô phỏng chức năng C; thông thường là vậy /usr/bin/printf, nhưng rất nhiều shell cũng thực hiện tích hợp sẵn cho nó. Bạn có thể sử dụng %02xđể có được biểu diễn hex của một ký tự, nhưng bạn cần đảm bảo rằng bạn chuyển một chuỗi bao gồm ký tự trong dấu ngoặc đơn ( Chỉnh sửa : Hóa ra chỉ cần một trích dẫn ở đầu là đủ):

printf "%%%02x\n" "'-"   # Outputs %2d

Bạn có thể tạo một hàm shell cho thuận tiện:

function hex() {
    printf "%%%02x\n" "'$1"
}

hex -   # Outputs %2d
hex _   # Outputs %5f
hex .   # Outputs %2e

rất nhiều, nó hoạt động hoàn hảo
Olivier DUVAL

Vấn đề duy nhất với điều này là với các ký tự 2 byte có mã bắt đầu bằng 0. ví dụ hex 'ץ'sẽ cung cấp %5e5thay vì %05e5. Bạn nên thay đổi phần thân của hàm thành s=printf "%%% 04x" "'$ 1"; echo "%${s%00}"
pyrocrasty

4

Hãy thử od :

$ echo -n "-_." | od -A n -t x1

2d 5f 2e

-A ncó nghĩa là không in offset và -t x1có nghĩa là loại đầu vào là số nguyên thập lục phân của 1 byte.


2
Đẹp. Bạn có thể sử dụng echo -nđể bỏ qua dòng mới ở cuối để odkhông nhận nó và biến nó thành0a
Michael Mrozek

2

xxdlà một tiện ích hex-dump được vận chuyển như một phần của vim-commongói.
Nó có một -ptùy chọn tiện dụng , tạo ra kiểu hexdump 'plain / postcript' liên tục .. Điều này có thể được đảo ngược thông qua -r... -usẽ tạo ra Hex-Digits chữ hoa.

$ echo -n "M" |xxd -p    # 1 ASCII char= 1 UTF-8 byte; Unicode Codepoint: U+0041
4d

$ echo -n "〶" |xxd -p -u # 1 CJK char= 3 UTF-8 bytes; Unicode Codepoint: U+3036  
E380B6

$ echo -n "Dump a string" |xxd -p -u  
44756D70206120737472696E67

$ echo -n "Dump and Revert" |xxd -p |xxd -r  
Dump and Revert

Có lẽ thêm công tắc -p khi hoàn nguyên : xxd -r -p. Chỉ xxd -rkhông làm việc cho tôi trong ví dụ trên.
bytefire
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.