I'm working with javascript code on the client side of a web site to parse mixed string/raw data, received by means of a JSON object via http POST response.
Some of the fields of that JSON object are texts/numbers, but the biggest and most important field (performance wise) are a raw field composed of raw data (octets).
How do I cast that field to a Float64Array()
object, so I can parse the data, using pure modern javascript, with performance in mind?
You can check stackoverflow answer may this help you. Or try to pass raw data in base64 encode in php and decode js for example:-
/ Create Base64 Object
var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}
// Define the string
var string = 'Hello World!';
// Encode the String
var encodedString = Base64.encode(string);
console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"
// Decode the String
var decodedString = Base64.decode(encodedString);
console.log(decodedString); // Outputs: "Hello World!"
if it doesn't work tell me i will create one example of this functionality HAPPY CODING
For browsers that support it, your best bet for raw performance may be the Encoding API. However, I wasn't able to find any way to make that API support raw binary mixed in among a larger JSON object.
You might also find this answer pertaining to TextEncoder helpful, although due to encoding issues I wasn't able to find any way to apply it directly to this situation.
So with those caveats, the best method I've been able to find so far for this particular situation is to just manually read the string into an ArrayBuffer and then view it as a FloatArray, based on this Google blog post:
function stringToFloat64Array(str) {
var buffer = new ArrayBuffer(str.length); // 1 byte per char
var view = new Uint8Array(buffer);
for (var i=str.length-1; i>=0; i--) {
view[i] = str.charCodeAt(i);
}
return new Float64Array(buffer, 0, str.length / 8); // 8 bytes per float
}
var json = {
"somenumber": 3,
"raw": "\x66\x66\x66\x66\x66\x66\x14\x40\x00\x00\x00\x00\x00\x00\x00\xc0"
}; // From JSON.parse
var floatArray = stringToFloat64Array(json.raw);
console.log(floatArray); // Float64Array [ 5.1, -2 ]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With