读取图像并计算其字节大小会在C与Go中产生不同的结果:
使用相同的图像,这是我在c:
中的readFile函数FILE *inputFile = fopen(inputFilename, "rb");
if (inputFile == NULL)
{
printf("cannot open file %s", inputFilename);
return 0;
}
else
{
fseek(inputFile, 0, SEEK_END);
long fsize = ftell(inputFile);
rewind(inputFile);
return(fsize);
}
在Go中,相同的图像:
// requests the same image as above
req, _ := http.NewRequest("GET", url, nil)
resp, _ := client.Do(req)
// Read the image into memory and set up the bytes buffer
img, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
size := len(img)
fmt.Println("%s\n", size)
return size
图像的C长度为:2275674 在Go中,大小为:1901248
答案 0 :(得分:-3)
在C中,您正在阅读原始文件。它不被解释为图像文件,只是一个字节集合。
在Go(我实际上并不熟悉)中,您似乎正在使用图像加载器,它将数据解释为图像,解码它(如果它被压缩则解压缩),给出DECODED图像的大小
这两者通常会有所不同(可能除了一些原始图像类型外)。