javascript - 将 JavaScript 转换为 Python 代码时出现十六进制问题
问题描述
我在下面有一个代码,我需要转换为 python 代码,这对我来说有一些问题。首先不确定我是否明白 Buffer 的意思。
var dgram = require("dgram");
var async = require("async");
var util = require("util");
var server = dgram.createSocket('dod3');
var domestic = require('./utils/domestic');
server.on("message", function (mess_data, remote) {
var buf = new Buffer(mess_data, 'hex');
if(buf[22] === 2) {
return;
}
var log_date = new Date().toISOString();
try {
var adress_m = buf.slice(16, 22).toString('hex').toUpperCase();
var status_id = buf.readUInt32BE(4);
var usage = buf.slice(1,2).toString('hex');
//var delta_time = buf.readUInt32BE(8);
var time = parseInt((new Date().getTime() / 1000), 10);
}
catch(ex) {
console.error(util.format('%s PARSE 500 \"%s\"', log_date, ex));
}
async.waterfall([
function(callback){
client.hgetall(ams_id, function (error, domestic){
if(domestic) {
callback(null, domestic["domestic_id"]);
}
else {
console.error(util.format('%s 404 \" No data found for %s | %s\"', log_date, status_id, error));
callback(null, null)
}
})
},
function(domestic_id, callback){
if(domestic_id) {
callback(null, domestic_id);
}
else {
domestic.get_domestic_id_by_ams(ams_id, function(result){
callback(null, result);
});
}
}
], function (error, domestic_id) {
if(domestic_id == null) {
return;
}
if(ams_id.toString().length > 4) {
ams_id = ams_id - 16777216;
}
var data = {
"user": {
"enter" : false
},
"device" : {
"type" : "fev",
"mac": adress_m
},
"event" : {
"origin" : "call",
"timestamp": time,
"type": "zap",
"product-type" : "domestic",
"channel": {
"id" : domestic_id,
"ams-id": ams_id
},
"content": {
"usage": usage
}
}
};
我的python代码:
def parse_jspy(mess_data):
buf = (hashlib.sha256(bytearray.fromhex(mess_data)).hexdigest())
buf = int(buf, 16)
buf_check = str(buf)
if buf_check[22] == 2:
pass
datetime_now = datetime.now()
log_date = datetime_now.isoformat()
adress_m = buf_check[16:22]
status_id = buf_check[4:]
usage = buf_check[1:2]
time_a = int(time())
dict_test = {
"user": {
"enter" : 'false'
},
"device" : {
"type" : "net",
"adress_m": adress_m
},
"event" : {
"origin" : "flex",
"timestamp": time_a,
"type": "relevant",
"product-type" : "info",
"channel": {
"id" : domestic_id,
"status_id": status_id
},
"content": {
"usage": usage
}
}
};
print dict_test
test_data = "02 01 01 dc 01 00 02 02 00 01 9a ba 02 01 9a bb 01 04 30 53 23 11 01"
主要问题是我不能很好地理解 javascript 代码并且不确定这个缓冲区函数,这会导致以下函数出现问题。
此外,我无法理解“async.waterfall”和 json(var 数据)之间的代码,对此的帮助也会很好,但不是主要的。缓冲和尝试/捕捉是必须的。
如果有任何问题或我可以额外提供的东西,我在这里。欢迎任何形式的帮助,在此先感谢。:)
解决方案
我不得不做一个类似的转换,但相反,从 python 到 java。我认为缓冲区具有数据字节,因此切片可以访问特定字节并设置为变量。抱歉,我只是发表评论,但不能因为还没有 50 声望。
推荐阅读
- huawei-mobile-services - 华为智能手表主题使用 Themestudio 11.05.300
- javascript - Mongoose 使用数组的另一个字段的项目更新字段
- ionic-framework - 使 ion-textarea 可调整大小
- c# - C# Moq:无法转换 Moq.Mock
给仲裁者 - python - 带 TPOT 分类器的 Shap 或 Lime
- node.js - 如何逐行读取文件,并使用节点 js 将它们插入 mongo 表中
- python - 熊猫检查值是否为 NONE
- android - 我的应用在运行 Android 版本低于 9 的设备上崩溃
- node.js - NodeJS 的指纹
- java - java.lang.NoClassDefFoundError:无法初始化类 org.apache.pdfbox.pdmodel.PDPage