저는 자바 스크립트에 익숙하지 않지만 큰 정적 2D 정수 배열 (값이 255보다 큰 경우)을 base64 문자열로 보내고 받아야합니다. 본질적인). 현재로서는이 간단하고 비효율적 인 솔루션으로 요소 단위 및 수동으로 문자열을 변환하는 방법을 생각해 냈습니다. 이해하는 한 많은 데이터를 복사해야하고 매우 느리게 처리해야합니다.Javascript : 2D 정수 배열을 base64 문자열로 변환 후
가능한 경우 Node.js 등과 같은 큰 측면 라이브러리를 사용하지 않고보다 효율적인 방법으로 수행 할 수 있습니까?
//----------- serializing/deserializing procedures
//encoding int contours array to be sent as base64 string
function getBase64IntArray(arr) {
var width = arr.length;
//This works given the inner arrays length never changes.
var height = arr[0].length;
//string that would contain data
var str = width.toString()+","+height.toString()+",";
for(var x = 0; x < height; x++) {
for(var y = 0; y < width; y++) {
str = str + arr[x][y].toString() + ",";
}
}
var str64 = btoa(str);
return str64;
}//getBase64IntArray
//deconding this string back to array
function getIntArrayfromBase64(str64) {
var str = atob(str64);
//first occurence of ","
var width_str = str.substr(0,str.indexOf(','));
str = str.substr(str.indexOf(',')+1); // cut the beginning
//again first occurence of ","
var height_str = str.substr(0,str.indexOf(','));
str = str.substr(str.indexOf(',')+1); // cut the beginning
var width = parseInt(width_str);
var height = parseInt(height_str);
//declare new array and fill it
var arr = new Array(height);
var curr_str = "";
for(var x = 0; x < height; x++) {
arr[x] = new Array(width);
for(var y = 0; y < width; y++) {
//first occurence of ","
curr_str = str.substr(0,str.indexOf(','));
// cut the beginning
str = str.substr(str.indexOf(',')+1);
arr[x][y]=parseInt(curr_str);
}
}
return arr;
}// getIntArrayfromBase64
보내기/받기 작품 :
//----------- example usage
function send(){
//encoding to base64
var arr = [
[1, 2],
[3, 4]
];
var base64 = getBase64IntArray(arr);
webSocket.send(base64);
}
webSocket.onmessage = function(event){
//reading array as base64 string
var arr = getIntArrayfromBase64(event.data);
var width = arr.length;
var height = arr[0].length;
writeResponse("Received "+width+" "+height+" "+arr[0][0]+arr[1][1]);
};
감사합니다! 그것은 작동! – Slowpoke
또 하나의 질문 : C++에서이 데이터를 디코딩 할 수있는 방법이 있습니까? 변환 알고리즘이란 무엇입니까? – Slowpoke
https://github.com/nlohmann/json –