簡體   English   中英

Java中的Hive UDF-從二進制轉換為十六進制

[英]Hive UDF in Java - Conversion from binary to hexadecimal

我需要將二進制轉換為十六進制。 該問題與以下鏈接中提到的問題非常相似,但我需要使用Java而不是node.js-使用node將mongodb Binary _id轉換為LUUID

列值是二進制的base64,在Hive中表示為數據類型字符串。 “ AAGOBh3pqkWvtaK8AO2U9w ==”。 所需的十六進制輸出-'00018e06-1de9-aa45-afb5-a2bc00ed94f7'

我正在用Java創建Hive UDF以進行此轉換,並且正在使用Hive 1.0版本。 我想將此字符串“ AAGOBh3pqkWvtaK8AO2U9w ==“(而不是轉換)表示為base64,以進一步轉換為十六進制。

類似於以上鏈接中的node.js示例-var hex = new Buffer(bin,'base64')。toString('hex');

但是base64似乎無效。

沒有Hive UDF,有沒有辦法做到這一點? 如果不是,我們如何將字符串列表示(不轉換)為base64列。

謝謝你的幫助!!

我建議您使用Apache Common Codec。您的字符串看起來像base64字符串。

Java中 ,使用:

String data = "AAGOBh3pqkWvtaK8AO2U9w==";
byte[] bytesOfBase64 = Base64.decodeBase64(data);
String hexString = Hex.encodeHexString(bytesOfBase64);
System.out.println(hexString);

參考

JavaScript中 ,使用:

function base64toHEX(base64) {

  var raw = atob(base64);

  var HEX = '';

  for ( i = 0; i < raw.length; i++ ) {

    var _hex = raw.charCodeAt(i).toString(16)

    HEX += (_hex.length==2?_hex:'0'+_hex);

  }
  return HEX.toUpperCase();

}

console.log(base64toHEX("AAGOBh3pqkWvtaK8AO2U9w=="));

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM