Tôi muốn chuyển đổi mã ASCII (như -hoặc _hoặc ., v.v.) thành biểu diễn thập lục phân trong hệ vỏ Unix (không có bclệnh), ví dụ: -=> %2d.
Có ý kiến gì không?
Tôi muốn chuyển đổi mã ASCII (như -hoặc _hoặc ., v.v.) thành biểu diễn thập lục phân trong hệ vỏ Unix (không có bclệnh), ví dụ: -=> %2d.
Có ý kiến gì không?
Câu trả lời:
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
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}"
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.
echo -nđể bỏ qua dòng mới ở cuối để odkhông nhận nó và biến nó thành0a
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
xxd -r -p. Chỉ xxd -rkhông làm việc cho tôi trong ví dụ trên.