在 Unix shell 脚本中将 ASCII 代码转换为十六进制

发布于 2024-09-16 10:12:11 字数 205 浏览 4 评论 0原文

我想将 ASCII 代码(如 -_. 等)转换为 Unix shell 中的 > 十六进制 表示形式(没有 bc 命令)。例如,- => %2d

我该怎么做呢?

I'd like to convert ASCII code (like -, _, ., etc.) in hexadecimal representation in Unix shell (without bc command). For example, - => %2d.

How can I do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

寄意 2024-09-23 10:12:11

这适用于 Bash、Dash (sh)、ksh、zsh 和 ash,并且仅使用内置函数:

编辑:

这是一个以十六进制和 chr 输出并接受十六进制输入的 ord 版本:

ordhex ()
{
    printf '%x' "'$1"
}

chrhex ()
{
    printf \\x"$1"
}

原始十进制版本:

ord ()
{
    echo -n $(( ( 256 + $(printf '%d' "'$1"))%256 ))
}

示例(添加换行符):

$ ord ' '
32
$ ord _
95
$ ord A
65
$ ord '*'
42
$ ord \~
126

这是相应的 chr

chr ()
{
    printf \\$(($1/64*100+$1%64/8*10+$1%8))
}

示例:

$ chr 125
}
$ chr 42
*
$ chr 0 | xxd
0000000: 00                                       .
$ chr 255 | xxd
0000000: ff                                       .

This works in Bash, Dash (sh), ksh, zsh and ash and uses only builtins:

Edit:

Here is a version of ord that outputs in hex and chr that accepts hex input:

ordhex ()
{
    printf '%x' "'$1"
}

chrhex ()
{
    printf \\x"$1"
}

The original decimal versions:

ord ()
{
    echo -n $(( ( 256 + $(printf '%d' "'$1"))%256 ))
}

Examples (with added newlines):

$ ord ' '
32
$ ord _
95
$ ord A
65
$ ord '*'
42
$ ord \~
126

Here is the corresponding chr:

chr ()
{
    printf \\$(($1/64*100+$1%64/8*10+$1%8))
}

Examples:

$ chr 125
}
$ chr 42
*
$ chr 0 | xxd
0000000: 00                                       .
$ chr 255 | xxd
0000000: ff                                       .
总攻大人 2024-09-23 10:12:11
perl -e 'print ord("_"), "\n"'
perl -e 'print ord("_"), "\n"'
永言不败 2024-09-23 10:12:11

python -c '导入系统;打印“{0:02x}”.format(ord(sys.argv[1]))''_'

python -c 'print "{0:02x}".format(ord("_"))'

我同意这不是最好的单行,但在看到基于 Perl 的答案后我无法抗拒。

python -c 'import sys; print "{0:02x}".format(ord(sys.argv[1]))' '_'

or

python -c 'print "{0:02x}".format(ord("_"))'

I agree that it's not the nicest one-liner, but I couldn't resist after seeing the Perl based answer .

羁拥 2024-09-23 10:12:11

以下内容适用于我正在使用的 ksh 版本:

chr ()
{
    printf \\x$1
}

The following works in the ksh version I'm using:

chr ()
{
    printf \\x$1
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文