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ó bc
lệ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ó bc
lệnh), ví dụ: -
=> %2d
.
Có ý kiến gì không?
Câu trả lời:
Có một printf
cô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 %5e5
thay 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 n
có nghĩa là không in offset và -t x1
có 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 để od
không nhận nó và biến nó thành0a
xxd
là một tiện ích hex-dump được vận chuyển như một phần của vim-common
gói.
Nó có một -p
tù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
... -u
sẽ 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 -r
không làm việc cho tôi trong ví dụ trên.