如何将二进制文件转换为ASCII

时间:2017-02-21 12:04:49

标签: python python-3.x binary ascii

首先,我感谢您愿意提供的任何帮助,所以感谢您花时间阅读本文。另外,我使用python 3,但我会尽力为我的需要转换任何python 2语法。

我已经设法读取我的二进制文件以生成一个非常长的字符串。这是其中的一小部分:

grok{
match => "\[%{DAY:day} %{MONTH:month} %{MONTHDAY:monthday} %{TIME:time} %{YEAR:year}\]"
}
mutate {
                add_field => {
                                "timestamp" => "\[%{DAY:day} %{MONTH:month} %{MONTHDAY:monthday} %{TIME:time} %{YEAR:year}\]"
        }
    }

我正在尝试将其转换为ASCII文本。 我挣扎的第一件事就是反斜杠。 我尝试过以下方法:

    PUT _ingest/pipeline/pipe_celery_log
    {
      "processors": [
        {
     "patterns": ["\\[%{DAY:day} %{MONTH:month} %{MONTHDAY:monthday} %{TIME:time} %{YEAR:year}\\]"]
 ....................

这给了我:

myfile = "\xde\xad\xbe\xef\x01\x00\xe1\x07\x01\x00\x01\x00\x1e\x00\"

问题是我丢失了反斜杠。我想把它输出:

convert1 = myfile.split('\\\')
print(convert1)

从这里开始,我打算使用for循环将列表中的每个项目转换为序数,然后再转换回字符:

['xde', 'xad', 'xbe', 'xef', 'x01', 'x00', 'xe1', 'x07', 'x01', 'x00', 'x01', 'x00']

我希望这会给我ASCII字符,但如果你知道一种更简单的方法,我很乐意听到它。 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的myfile代码不是有效的Python行。假设我们删除它的最后一个\。如果你想使用ord()将它分成每个单独的角色,那么简单的列表理解就可以了。

myfile = "\xde\xad\xbe\xef\x01\x00\xe1\x07\x01\x00\x01\x00\x1e\x00"
convert = [ ord( item ) for item in myfile ]
print( convert )

输出:[222, 173, 190, 239, 1, 0, 225, 7, 1, 0, 1, 0, 30, 0]

字节字符串的每个字符(" \ xde"," \ xad",...)本身都被计为单独的单位,因此迭代字节字符串将已经计数它们作为单独的单元,根本不需要将它分开。接下来你需要做的就是在每个单元上应用ord(),同时迭代以获得你想要的结果。