I am using Node.js v4.5. Suppose I have this Uint8Array
variable.
var uint8 = new Uint8Array(4);
uint8[0] = 0x1f;
uint8[1] = 0x2f;
uint8[2] = 0x3f;
uint8[3] = 0x4f;
This array can be of any length but let's assume the length is 4.
I would like to have a function that that converts uint8
into the hex string equivalent.
var hex_string = convertUint8_to_hexStr(uint8);
// hex_string becomes "1f2f3f4f"
4 Answers 4
You can use Buffer.from()
and subsequently use toString('hex')
:
let hex = Buffer.from(uint8).toString('hex');
2 Comments
Another solution:
Base function to convert int8 to hex:
// padd with leading 0 if <16
function i2hex(i) {
return ('0' + i.toString(16)).slice(-2);
}
reduce
:
uint8.reduce(function(memo, i) {return memo + i2hex(i)}, '');
Or map
and join
:
Array.from(uint8).map(i2hex).join('');
3 Comments
uint8.reduce(function(memo, i) { return memo + ("0"+i.toString(16)).slice(-2); }, '');
uint8.reduce((t, x) => t + x.toString(16).padStart(2, '0'), '')
Buffer.from
has multiple overrides.
If it is called with your uint8
directly, it unnecessarily copies its content because it selects Buffer.from( <Buffer|Uint8Array> )
version.
You should call Buffer.from( arrayBuffer[, byteOffset[, length]] )
version which does not copy and just creates a view of the buffer.
let hex = Buffer.from(uint8.buffer,uint8.byteOffset,uint8.byteLength).toString('hex');
1 Comment
Buffer is Node.js specific.
This is a version that works everywhere:
const uint8 = new Uint8Array(4);
uint8[0] = 0x1f;
uint8[1] = 0x2f;
uint8[2] = 0x3f;
uint8[3] = 0x4f;
function convertUint8_to_hexStr(uint8) {
return Array.from(uint8)
.map((i) => i.toString(16).padStart(2, '0'))
.join('');
}
convertUint8_to_hexStr(uint8);
Uint8Array.prototype.toHex()
arriving soon, and here is the polyfill: github.com/zloirock/core-js#uint8array-to--from-base64-and-hex