将二进制数据转换为Google表格中的十六进制

时间:2019-01-30 19:23:11

标签: google-apps-script google-sheets google-api

我有一个Google表格文档,其中的一列包含二进制数据。二进制数据是4个32位数字。这是来自一个单元格c0a80123000006150000000180004203的二进制数据的ASCII十六进制表示示例。

Google表格中是否有一种方法可以将该二进制数字转换为十六进制字符串。我正在寻找类似BIN2HEX(data[0]) = "0xc0"的内容。常规BIN2HEX无法正常工作,因为数据大于它的处理能力。

Raw text sample fileConverted google sheet


更新:

根据一个建议,我创建了一个Google API脚本来处理二进制数据。但是,结果至少可以说很奇怪。

function extractip(binary_data) {
  var blob = Utilities.newBlob(binary_data);
  var ip1 = blob.getBytes()[0];
  var ip2 = blob.getBytes()[1];
  var ip3 = blob.getBytes()[2];
  var ip4 = blob.getBytes()[3];
  
  return Utilities.formatString("%u.%u.%u.%u", ip1, ip2, ip3, ip4);
}

二进制blob中的前4个字节表示IP地址,在所附示例中为192.168.0.X形式。但是,输出返回类似-17.-65.-67.-17的内容。

1 个答案:

答案 0 :(得分:0)

此修改如何?

在Google Apps脚本中,由Utilities.newBlob(data).getBytes()转换的数据是带符号的十六进制的字节数组。需要将bytes数组转换为无符号十六进制。

修改后的脚本:

function extractip(binary_data) {
  var byteAr = Utilities.newBlob(binary_data).getBytes();
  return byteAr.map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");
}

注意:

  • 例如,使用此功能时,请像共享电子表格一样将=extractip(G2)放在“ H2”上。

编辑:

如果您想直接检索十进制数字,例如192.168.0.X,请进行如下修改。这是一个示例修改。因此,请根据您的情况进行修改。

发件人:

return byteAr.map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");

收件人:

return byteAr.map(function(e) {return e < 0 ? e + 256 : e}).join(",");