从文件中读取二进制字符串并保存为十六进制

时间:2018-04-01 20:37:04

标签: python node.js binary hex

我的文件包含以下行:\x8b\xe2=V\xa2\x050\x10\x1f\x11lvCh\x80\xf8z\xf8%\tHKE\xf2\xc8\x92\x12\x83\xe8R\xd3\xc8 我需要将此字符串转换为十六进制代码:0x8be23d56a20530101f116c76436880f87af82509484b45f2c8921283e852d3c8

我试过在python和nodejs中这样做。但是如果我在控制台模式下这样做 - 一切正常,如果我从文件中读取,我的结果是错误的,因为从文件读取为引用的字符串。

2 个答案:

答案 0 :(得分:0)

对于python:

import binascii
f = open('path/to/file', 'rb').read()
hex_encoded = binascii.hexlify(f).decode('utf-8')
print(hex_encoded) #Prints hex stream as string

希望有所帮助

答案 1 :(得分:0)

您在控制台应用程序中使用的字符串,当您将其转换为Buffer时,“\”字符不计算在内。请使用双背斜杠。从文件中读取数据时没有问题。

对于NodeJ,将字符串转换为缓冲区并将该缓冲区转换为十六进制值。

fs = require('fs')
fs.readFile('notes.txt', 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }
  const buf = Buffer.from(data, 'ascii');
  //converting string into buffer
  var hexvalue = buf.toString('hex');
  //with buffer, convert it into hex
  console.log(hexvalue);
});

对于python,你可以试试这个。

file = open("notes.txt","r")
str = file.readline()
str = str.encode('utf-8')
print (str.hex())