[英]Grouping a base64->buffer hex string by bytes in Javascript?
[英]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.