【问题标题】:unable to convert string to hex in PERL无法在 PERL 中将字符串转换为十六进制
【发布时间】:2014-11-09 16:30:46
【问题描述】:

我正在解析一个文件,该文件由十进制和十六进制值组成,以“:”分隔:

foreach $line (<INFO>)  { 
    my ($seq_no, $size_in_bytes, $Hitcount, $buffer) = split /:/, $line;

    # $size in_bytes is a hexadecimal value.

    print "check 1 $size_in_bytes\n";      # printing some value in hexadecimal
    $size_in_bytes = hex($size_in_bytes);
    print "check 2  $size_in_bytes\n";     # Printing ZERO??
}

我也尝试了以下方法,但仍然只给出零。

$dec_num = sprintf("%d", hex($num));

你能告诉我如何将字符串转换为十进制

【问题讨论】:

  • 你能上传几行例子吗?与 Apache/modules 有什么联系?
  • 调试传递给hex()的值——例如,如果有前导空格,它将返回0:hex(" 12") == 0,但hex("12") == 18。无需使用sprintf 将数字字符串化。
  • 添加 use Data::Dumper; $Data::Dumper::Useqq=$Data::Dumper::Terse=1; print "check 0 " . Dumper($size_in_bytes); 并向我们展示至少几行输入和输出
  • 我建议您的数据中的冒号前后可能有空格。尝试像这样拆分split /\s*:\s*/, $line
  • @user991282:最好一开始就把split 弄对,而不是做错并破解修复程序。

标签: perl perl-module mod-perl


【解决方案1】:

由于问题在于您的字段中有多余的空格,您应该改为这样拆分

split /\s*:\s*/, $line

这样,如果有空格,空格将被删除,但如果没有空格,split 仍然可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2018-01-22
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2019-10-04
    • 2017-04-05
    相关资源
    最近更新 更多