在go中编码可执行文件,在javascript中解码不起作用

在go中编码可执行文件,在javascript中解码不起作用,javascript,node.js,go,encoding,base64,Javascript,Node.js,Go,Encoding,Base64,我正在用go对一个可执行文件进行编码,并试图用javascript对其进行解码 对javascript中编码的字符串进行解码不会生成匹配的文件。我能够编码一个字符串,比如“这是一个测试字符串”,并在javascript中对其进行解码,效果很好。但是,当我使用一个可执行应用程序并执行相同的操作时,解码后的文件比编码前的文件大 我做错了什么?谢谢 这是我正在使用的测试可执行文件。它是在C++中,用 g++< />代码编译,并使用输出。 #include <iostream> int ma

我正在用
go
对一个可执行文件进行编码,并试图用
javascript
对其进行解码

javascript
中编码的
字符串进行解码不会生成匹配的文件。我能够编码一个字符串,比如
“这是一个测试字符串”
,并在
javascript
中对其进行解码,效果很好。但是,当我使用一个可执行应用程序并执行相同的操作时,解码后的文件比编码前的文件大

我做错了什么?谢谢

这是我正在使用的测试可执行文件。它是在C++中,用<代码> g++< />代码编译,并使用输出。
#include <iostream>
int main(void) {

    char test1[] = "hello";

    std::cout << "test1: " << test1 << std::endl;

    char test2[] = "world";

    std::cout << "test2: " << test2 << std::endl;

    char test3[] = "foobar";

    std::cout << "test3: " << test3 << std::endl;

    return 0;
}
下面是我试图用javascript解码和保存文件的方法

let decodedBytes = atob("put the bytes here from your clipboard from running the go app");

fs.writeFileSync(
    "/destination/to/save/file",
    decodedBytes
);

我想出来了。经过一些研究和阅读,我发现了。起初,这个问题对我没有帮助,但在阅读了那篇文章一段时间后,我尝试了几个例子,并且能够让其中一个起作用。我能够让
解决方案1
工作。下面是
javascript
我现在必须让它工作起来

保存的文件与源文件完全相同

function b64ToUint6(nChr) {
  return nChr > 64 && nChr < 91
    ? nChr - 65
    : nChr > 96 && nChr < 123
    ? nChr - 71
    : nChr > 47 && nChr < 58
    ? nChr + 4
    : nChr === 43
    ? 62
    : nChr === 47
    ? 63
    : 0;
}

function base64DecToArr(sBase64, nBlockSize) {
  var sB64Enc = sBase64.replace(/[^A-Za-z0-9\+\/]/g, ""),
    nInLen = sB64Enc.length,
    nOutLen = nBlockSize
      ? Math.ceil(((nInLen * 3 + 1) >>> 2) / nBlockSize) * nBlockSize
      : (nInLen * 3 + 1) >>> 2,
    aBytes = new Uint8Array(nOutLen);

  for (
    var nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0;
    nInIdx < nInLen;
    nInIdx++
  ) {
    nMod4 = nInIdx & 3;
    nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (18 - 6 * nMod4);
    if (nMod4 === 3 || nInLen - nInIdx === 1) {
      for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
        aBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255;
      }
      nUint24 = 0;
    }
  }

  return aBytes;
}

let decodedBytes = base64DecToArr("bytes to decode");

fs.writeFileSync(
    "/destination/to/save/file",
    decodedBytes
);

功能b64ToUint6(nChr){
返回nChr>64&&nChr<91
?nChr-65
:nChr>96&&nChr<123
?nChr-71
:nChr>47&&nChr<58
?nChr+4
:nChr==43
? 62
:nChr==47
? 63
: 0;
}
函数base64DecToArr(sBase64,nBlockSize){
var sB64Enc=sBase64。替换(/[^A-Za-z0-9\+\/]/g,”),
nInLen=sB64Enc.长度,
nOutLen=nBlockSize
数学单元((九分*3+1)>>2)/nBlockSize)*nBlockSize
:(nInLen*3+1)>>>2,
aBytes=新的UINT8阵列(nOutLen);
为了(
变量nMod3,nMod4,numint24=0,nOutIdx=0,nInIdx=0;
nInIdx>((16>>nMod3)和24))&255;
}
nUint24=0;
}
}
返回aBytes;
}
设decodedBytes=base64DecToArr(“要解码的字节”);
fs.writeFileSync(
“/destination/to/save/file”,
解码字节
);

我想出来了。经过一些研究和阅读,我发现了。起初,这个问题对我没有帮助,但在阅读了那篇文章一段时间后,我尝试了几个例子,并且能够让其中一个起作用。我能够让
解决方案1
工作。下面是
javascript
我现在必须让它工作起来

保存的文件与源文件完全相同

function b64ToUint6(nChr) {
  return nChr > 64 && nChr < 91
    ? nChr - 65
    : nChr > 96 && nChr < 123
    ? nChr - 71
    : nChr > 47 && nChr < 58
    ? nChr + 4
    : nChr === 43
    ? 62
    : nChr === 47
    ? 63
    : 0;
}

function base64DecToArr(sBase64, nBlockSize) {
  var sB64Enc = sBase64.replace(/[^A-Za-z0-9\+\/]/g, ""),
    nInLen = sB64Enc.length,
    nOutLen = nBlockSize
      ? Math.ceil(((nInLen * 3 + 1) >>> 2) / nBlockSize) * nBlockSize
      : (nInLen * 3 + 1) >>> 2,
    aBytes = new Uint8Array(nOutLen);

  for (
    var nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0;
    nInIdx < nInLen;
    nInIdx++
  ) {
    nMod4 = nInIdx & 3;
    nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (18 - 6 * nMod4);
    if (nMod4 === 3 || nInLen - nInIdx === 1) {
      for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
        aBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255;
      }
      nUint24 = 0;
    }
  }

  return aBytes;
}

let decodedBytes = base64DecToArr("bytes to decode");

fs.writeFileSync(
    "/destination/to/save/file",
    decodedBytes
);

功能b64ToUint6(nChr){
返回nChr>64&&nChr<91
?nChr-65
:nChr>96&&nChr<123
?nChr-71
:nChr>47&&nChr<58
?nChr+4
:nChr==43
? 62
:nChr==47
? 63
: 0;
}
函数base64DecToArr(sBase64,nBlockSize){
var sB64Enc=sBase64。替换(/[^A-Za-z0-9\+\/]/g,”),
nInLen=sB64Enc.长度,
nOutLen=nBlockSize
数学单元((九分*3+1)>>2)/nBlockSize)*nBlockSize
:(nInLen*3+1)>>>2,
aBytes=新的UINT8阵列(nOutLen);
为了(
变量nMod3,nMod4,numint24=0,nOutIdx=0,nInIdx=0;
nInIdx>((16>>nMod3)和24))&255;
}
nUint24=0;
}
}
返回aBytes;
}
设decodedBytes=base64DecToArr(“要解码的字节”);
fs.writeFileSync(
“/destination/to/save/file”,
解码字节
);