将ASCII码转换为数字

时间:2013-10-25 11:34:04

标签: perl numbers integer ascii data-conversion

我有一个文件,其中包含12列(bam文件),第11列包含ASCII代码。在一个文件中,我有多个ASCII码。我想将其转换为数字。 我认为这段代码:

perl -e '$a=ord("ALL_ASCII_CODES_FROM-FILE"); print "$a\t"'

我想创建循环来读取所有ASCII代码,这些代码位于第11列,将其转换为数字并将结果计数为一个数字。

2 个答案:

答案 0 :(得分:4)

您需要将字符串拆分为单个字符,循环遍历每个字符,然后在循环中调用ord

my @codes = map ord, split //, $str;
say join '.', map { sprintf("%02X", $_) } @codes;

方便的是,unpack 'C*'完成所有这些。

my @codes = unpack 'C*', $str;
say join '.', map { sprintf("%02X", $_) } @codes;

如果您打算以十六进制打印出来,可以使用v中的printf修饰符。

say sprintf("%v02X", $str);

答案 1 :(得分:4)

将字符串转换为相应ASCII码列表的自然工具是unpack

my @codes = unpack "C*", $string;

特别是,假设您正在解析SAM file(或更常见的是FASTQ-style quality string的QUAL列,我相信正确的转换将是:

my @qual = map {$_ - 33} unpack "C*", $string;

聚苯乙烯。从你提到的“列”,我假设你实际上正在解析一个SAM文件,而不是一个BAM文件。如果我正确读取规范,BAM格式似乎没有使用+33偏移量作为质量值,所以如果你 解析BAM文件,你只需使用上面的第一个例子为此。