簡體   English   中英

JavaScript比較緩沖區和Python之間的十六進制字符串

[英]JavaScript compare hex string from buffer to Python

我想從Buffer打印一個十六進制的轉義序列字符串。

例如:

buffer = .... // => <Buffer d3 e9 52 18 4c e7 77 f7 d7>

如果我做:

console.log(buffer.toString('hex'));

我得到:

d3e952184ce777f7d7

但我想使用\\x表示形式來表示(我從python獲取並需要進行比較)

\xd3\xe9R\x18L\xe7w\xf7\xd7` // same as <Buffer d3 e9 52 18 4c e7 77 f7 d7>

這似乎可以滿足您的要求:

function encodehex (val) {
  if ((32 <= val) && (val <= 126))
    return String.fromCharCode(val);
  else
    return "\\x"+val.toString(16);
}

let buffer = [0xd3, 0xe9, 0x52, 0x18, 0x4c, 0xe7, 0x77, 0xf7, 0xd7];
console.log(buffer.map(encodehex).join(''));

基本上,您要在輸出中區分可打印和不可打印的ASCII字符。

您可以通過map方法將緩沖區轉換為數組,將每個項目轉換為十六進制字符串。 最后使用\\x將數組連接到字符串(包括前導'\\ x')

骯臟的例子

let str = '\\x' +
  [0xd3, 0xe9, 0x52, 0x18, 0x4c, 0xe7, 0x77, 0xf7, 0xd7]
    .map(item => item.toString(16))
    .join('\\x');

console.log(str); // \xd3\xe9\x52\x18\x4c\xe7\x77\xf7\xd7

或者您可以將您的toString(“十六進制”)字符串分割成兩個字符塊(陣列),並加入它\\\\x (包括領先。 \\\\x如上)一樣:

let str = 'd3e952184ce777f7d7';
str = '\\x' + str.match(/.{1,2}/g).join('\\x');
console.log(str); // \xd3\xe9\x52\x18\x4c\xe7\x77\xf7\xd7

暫無
暫無

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

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