7

I can generate a byte array with

var myByteArray = window.crypto.getRandomValues(new Uint8Array(16))

and I get

181,143,16,173,231,56,63,149,181,185,224,124,84,230,123,36

I can then turn this into a string with

cryptoHelpers.convertByteArrayToString(myByteArray);

and i get

µ­ç8?µ¹à|Tæ{$

But what I really want is a 128 bit hexadecimal like...

6a3e52297b2e593f4d506f7164

And I want to be able to go back from hexadecimal to a byte array.

Is there a copy and paste function or library to make this magic happen?

closed as off-topic by Anonymous, Raghav Sood, Pieter Wuille, Jestin, dbkeys Oct 20 '18 at 9:53

  • This question does not appear to be about Bitcoin within the scope defined in the help center.
If this question can be reworded to fit the rules in the help center, please edit the question.

  • 3
    I'm voting to close this question as off-topic because it is unrelated to Bitcoin. – Anonymous Oct 12 '18 at 11:25
  • You should ask this question on Stackoverflow, however search first. I'm positive the answer will already exist. – Jestin Oct 17 '18 at 18:15
  • I'm voting to close this question as off-topic because, the question, as written, does not appear related to bitcoin. Perhaps there is a relation, but if so, it should be made explicit. – dbkeys Oct 20 '18 at 9:53
7

Here's something you can copy-paste in.

byteArray = new Uint8Array([181,143,16,173,231,56,63,149,181,185,224,124,84,230,123,36]);
function toHexString(byteArray) {
  return Array.prototype.map.call(byteArray, function(byte) {
    return ('0' + (byte & 0xFF).toString(16)).slice(-2);
  }).join('');
}
function toByteArray(hexString) {
  var result = [];
  for (var i = 0; i < hexString.length; i += 2) {
    result.push(parseInt(hexString.substr(i, 2), 16));
  }
  return result;
}
hexString = toHexString(byteArray);
byteArray = toByteArray(hexString);

From here/here.

  • Using the above I'm getting a string that is not 128bits 289332005600940420022031 if I console log myByteArray i get an array buffer like "Uint8Array(16) [181, 143, 16, 173, 231, 56, 63, 149, 181, 185, 224, 124, 84, 230, 123, 36]" how do i convert this to an array? – Will-In-China Apr 12 '17 at 4:12
  • @Will-In-China See edit. – Nick ODell Apr 12 '17 at 4:19
  • toByteArray get wrong values when hex-string contains an odd number of characters: "fff", "1AB" – Geograph Apr 12 '18 at 15:55
  • 2
    @Geograph since each byte is 2 hex digits, this is expected behaviour - a hex string with an odd number of digits is in invalid hex string. – david.barkhuizen Oct 10 '18 at 10:53

Not the answer you're looking for? Browse other questions tagged or ask your own question.