我有一个Google表格文档,其中的一列包含二进制数据。二进制数据是4个32位数字。这是来自一个单元格c0a80123000006150000000180004203
的二进制数据的ASCII十六进制表示示例。
Google表格中是否有一种方法可以将该二进制数字转换为十六进制字符串。我正在寻找类似BIN2HEX(data[0]) = "0xc0"
的内容。常规BIN2HEX
无法正常工作,因为数据大于它的处理能力。
Raw text sample file。 Converted 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
的内容。
答案 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(",");