gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:06 26 4
gpt4 key购买 nike

我正在 go 中编码可执行文件,并尝试在 javascript 中对其进行解码。

javascript 中解码编码的字符串不会产生匹配的文件。我能够对像 "this is a test string" 这样的字符串进行编码,并在 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;
}

这是我用来将文件转换为字节go应用程序。

package main

import (
"fmt"
"github.com/atotto/clipboard"
"io/ioutil"
)

func main() {
bytes, err := ioutil.ReadFile("/path/to/file/a.out")
if err != nil {
fmt.Println(err)
}

enc := make([]byte, base64.RawStdEncoding.EncodedLen(len(bytes)))
base64.RawStdEncoding.Encode(enc, bytes)

fmt.Println("byte size: ", len(bytes))
fmt.Println("encoded byte size: ", len(enc))

clipboard.WriteAll(string(enc))
}

这是我尝试在 JavaScript 中解码和保存文件的方法。

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

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

最佳答案

我明白了。经过一些研究和阅读,我发现this questionthis article 。最初这个问题对我没有帮助,但在读了那篇文章一段时间后,我尝试了一些示例,并能够让其中一个工作。我能够让解决方案 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
);

关于javascript - 在 go 中编码可执行文件并在 javascript 中解码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58869372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com