【问题标题】:Using hexadecimal values in a Perl variable在 Perl 变量中使用十六进制值
【发布时间】:2013-07-04 18:38:58
【问题描述】:

我有一个变量$count,它将从命令行获取一个十进制值,我有一段代码可以生成名称为filename001 filename002 ....filename00a,filename00b等的文件。它将一个十六进制数字(不带0x)附加到filename 它生成的每个新文件。

我使用变量$count 来跟踪附加到filename 的数字。我想从生成的文件(filename00b filename00a 等)中提取包含特定文本 Result: 的行。为此,我通过以下方式使用 grep 工具:

`grep "Result:" path to the file/filename0*$count`

这工作正常,直到我到达第 10 个文件,当 10 变成十六进制的a,但是 grep 命令中的$count 被简化为 10,所以 grep 无法找到该文件。我尝试使用hex($count),但它似乎不起作用。它要求$count 变量可以递增或递减,并且它仍然保存十六进制值。有没有办法做到这一点?

【问题讨论】:

    标签: perl unix


    【解决方案1】:

    perl 中的hex 函数将其参数解释为十六进制字符串,并返回对应的整数值,例如:

    print hex '0xAf'; # prints '175'
    print hex 'aF';   # same
    

    这来自perldoc -f hexhex的定义。

    您似乎想做相反的事情,将您的十进制数字转换为十六进制表示。您可以使用 printf 来做到这一点,例如:

    printf("%03x", 175); # prints '0af'
    printf("%03x", 0xAf); # same
    

    如果要将值保存在变量中,请使用sprintf 而不是printf,它会返回字符串而不是打印它。

    【讨论】:

    • :我尝试使用 sprintf,$count 现在有十六进制等效于十进制数,但是当我尝试增加它时,我收到一条消息说变量中的内容是一个字符串。如果有一种方法可以直接在变量中使用十六进制数字,我会很好。
    • 整数就是整数,不管是十进制、十六进制还是八进制,都是格式的问题。将$count 保留为数字,根据需要递增或递减或操作它,当您希望将其格式化为十六进制时,请使用sprintf。如果您想要相反,并从十六进制 string 中获取一个数字,则使用 perlhex 函数。
    • @Gautam 您应该了解数字(作为值)与其用符号表示(通常称为数字)之间的区别。这里 x-es 的计数 'xxxxx' 是十进制的 5,罗马数字系统中的 V 和二进制中的 101 .. 当您将五个 x-es 递增(加一)时,您会得到 ' xxxxxx' 什么是 6VI110 - 根据您想要的表示方式。
    • @janos 你是对的,我必须按照你的建议做,谢谢
    猜你喜欢
    • 2021-03-06
    • 2021-02-16
    • 2016-12-11
    • 1970-01-01
    • 2014-07-31
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    相关资源
    最近更新 更多