如何在C中将图像转换为base64?

吉拉德

我需要将JPG图像转换为BASE64,才能将其插入到Cassandra群集中,所有这些都在C中,我发现了这个问题如何在C中对base64进行编码(解码)?但是如果我尝试将fRead的结果放在图像上,似乎是分割错误,(不可打印的字符似乎会造成问题)

/* ----------------------------------------------------------------------------------Includes DO NOT MODIFY---------------------------------------------------------------------------------------------- */

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include "cassandra.h"
#include "../headers/other.h"

size_t fileLen;
/* ---------------------------------------------------------------------------------------CONFIG HERE !---------------------------------------------------------------------------------------------------*/

/*                                                                                ---------Connection----------                                                                                           */

const char *server_adress = "127.0.0.1"; /* Insert your server adress here */

const char *keyframe = "hallo"; /* Insert name of the table you want to insert your data into (Must be created) */

const char *table = "blobi"; /* Insert name of the table you want to insert your data into (Must be created) */

const char *column_name1 = "file_name"; /* Insert name of the column for the key input */
const char *column_name2 = "content"; /* Insert name of the column for the blob input */

/*                                                                                ------------Data-------------                                                                                           */

const char *file_path = "/home/nicolas/Pictures/Minions.jpg"; /* Insert the name of the binary to read and input into your table (changes coming soon !) */

/* -------------------------------------------------------------------------------Do not modify beyond this point ----------------------------------------------------------------------------------------*/

void ReadFile(const char *name)
{
  FILE *file;
  unsigned char *buffer;
  char *lobi;

  //Open file                                                                                                                                                                                                
  file = fopen(name , "rb");
  if (!file)
    {
      fprintf(stderr, "Unable to open file %s", name);
      return;
    }

  //Get file length                                                                                                                                                                                          
  fseek(file, 0, SEEK_END);
  fileLen=ftell(file);
  fseek(file, 0, SEEK_SET);

  //Allocate memory                                                                                                                                                                                          
  buffer=(char *)malloc(fileLen+1);
  if (!buffer)
    {
      fprintf(stderr, "Memory error!");
      fclose(file);
      return;
    }

  //Read file contents into buffer                                                                                                                                                                           
  fread(buffer, fileLen, 1, file);
  size_t *output_length;
  lobi = base64_encode(buffer, fileLen, output_length);
  printf("%s\n", lobi);
  fclose(file);
  insert_blob(buffer);
  free(buffer);
}

这是base64.c

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

static char encoding_table[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
                                'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
                                'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
                                'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
                                'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
                                'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
                                'w', 'x', 'y', 'z', '0', '1', '2', '3',
                                '4', '5', '6', '7', '8', '9', '+', '/'};
static char *decoding_table = NULL;
static int mod_table[] = {0, 2, 1};

void build_decoding_table() {

  decoding_table = malloc(256);

  for (int i = 0; i < 64; i++)
    decoding_table[(unsigned char) encoding_table[i]] = i;
}

char *base64_encode(const unsigned char *data,
                    size_t input_length,
                    size_t *output_length) {

  *output_length = 4 * ((input_length + 2) / 3);

  char *encoded_data = malloc(*output_length);
  if (encoded_data == NULL) return NULL;

  for (int i = 0, j = 0; i < input_length;) {

    uint32_t octet_a = i < input_length ? (unsigned char)data[i++] : 0;
    uint32_t octet_b = i < input_length ? (unsigned char)data[i++] : 0;
    uint32_t octet_c = i < input_length ? (unsigned char)data[i++] : 0;

    uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c;

    encoded_data[j++] = encoding_table[(triple >> 3 * 6) & 0x3F];
    encoded_data[j++] = encoding_table[(triple >> 2 * 6) & 0x3F];
    encoded_data[j++] = encoding_table[(triple >> 1 * 6) & 0x3F];
    encoded_data[j++] = encoding_table[(triple >> 0 * 6) & 0x3F];
  }

  for (int i = 0; i < mod_table[input_length % 3]; i++)
    encoded_data[*output_length - 1 - i] = '=';

  return encoded_data;
}

您有任何建议或我可以使用的lib吗?

这里是gdb的回溯:

#0  0x00000000004013e4 in base64_encode (data=0x604960 "\377\330\377", <incomplete sequence \340>, input_length=55605, output_length=0x401e20 <__libc_csu_init>) at sources/base64.c:30

#1  0x0000000000401a45 in ReadFile (name=0x401ed0 "/home/nicolas/Pictures/Minions.jpg") at sources/blob_test.c:81

#2  0x0000000000401b2e in main () at sources/blob_test.c:110

提前致谢 !

WhozCraig

这是错误的:

size_t *output_length; // declared an indeterminate pointer
lobi = base64_encode(buffer, fileLen, output_length); // sends bogus address

它应该是

size_t output_length = 0; // note *NOT* a pointer
lobi = base64_encode(buffer, fileLen, &output_length); // note address-of operator

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C中将图像转换为base64?

来自分类Dev

如何在Cordova中将图像从画廊转换为base64

来自分类Dev

如何在Kotlin Android中将base64字符串转换为图像

来自分类Dev

如何在jQuery中将预加载的图像转换为base64数据

来自分类Dev

如何在xamarin.android中将图像转换为base64?

来自分类Dev

如何在Angular中将本地图像文件转换为base64?

来自分类Dev

如何在Postgres中将bytea转换为base64

来自分类Dev

如何在Azure中将pdf转换为base64

来自分类Dev

如何在JavaScript中将base64 WAV转换为base64 mp3

来自分类Dev

如何在angularjs中将图像转换为base 64?

来自分类Dev

如何在fabricjs中将画布转换为具有嵌入式图像base64的SVG

来自分类Dev

如何在Vue.Js中将图像URL从服务器(API / ImageURL)转换为Base64

来自分类Dev

如何在Qt中将Jpeg Base64字符串转换为jpeg图像

来自分类Dev

如何在fabricjs中将画布转换为具有嵌入式图像base64的SVG

来自分类Dev

如何在Android中将位图转换为PNG,然后转换为base64?

来自分类Dev

在angularjs中将图像转换为base64

来自分类Dev

在Ruby中将实际图像转换为base64

来自分类Dev

在Flutter错误中将base64转换为图像

来自分类Dev

如何在Java中将Image转换为base64字符串?

来自分类Dev

如何在Rust中将十六进制值转换为Base64

来自分类Dev

如何在PHP中将base64转换为十六进制?

来自分类Dev

如何在Java中将Base64编码的字符串转换为UUID

来自分类Dev

如何在Groovy脚本中将十六进制转换为base64格式

来自分类Dev

如何在 swift 3 中将 UIImage 数组转换为 base64 数组?

来自分类Dev

如何在 Ionic 中将 base64 字符串转换为 JPG 或 Png

来自分类Dev

如何将图像转换为base64

来自分类Dev

如何在sails.js或通常在服务器端JavaScript中将图像转换为base64编码的数据URL?

来自分类Dev

将图像转换为base64

来自分类Dev

如何在Monodroid中将位图图像转换为Base64PNG字符串

Related 相关文章

  1. 1

    如何在C中将图像转换为base64?

  2. 2

    如何在Cordova中将图像从画廊转换为base64

  3. 3

    如何在Kotlin Android中将base64字符串转换为图像

  4. 4

    如何在jQuery中将预加载的图像转换为base64数据

  5. 5

    如何在xamarin.android中将图像转换为base64?

  6. 6

    如何在Angular中将本地图像文件转换为base64?

  7. 7

    如何在Postgres中将bytea转换为base64

  8. 8

    如何在Azure中将pdf转换为base64

  9. 9

    如何在JavaScript中将base64 WAV转换为base64 mp3

  10. 10

    如何在angularjs中将图像转换为base 64?

  11. 11

    如何在fabricjs中将画布转换为具有嵌入式图像base64的SVG

  12. 12

    如何在Vue.Js中将图像URL从服务器(API / ImageURL)转换为Base64

  13. 13

    如何在Qt中将Jpeg Base64字符串转换为jpeg图像

  14. 14

    如何在fabricjs中将画布转换为具有嵌入式图像base64的SVG

  15. 15

    如何在Android中将位图转换为PNG,然后转换为base64?

  16. 16

    在angularjs中将图像转换为base64

  17. 17

    在Ruby中将实际图像转换为base64

  18. 18

    在Flutter错误中将base64转换为图像

  19. 19

    如何在Java中将Image转换为base64字符串?

  20. 20

    如何在Rust中将十六进制值转换为Base64

  21. 21

    如何在PHP中将base64转换为十六进制?

  22. 22

    如何在Java中将Base64编码的字符串转换为UUID

  23. 23

    如何在Groovy脚本中将十六进制转换为base64格式

  24. 24

    如何在 swift 3 中将 UIImage 数组转换为 base64 数组?

  25. 25

    如何在 Ionic 中将 base64 字符串转换为 JPG 或 Png

  26. 26

    如何将图像转换为base64

  27. 27

    如何在sails.js或通常在服务器端JavaScript中将图像转换为base64编码的数据URL?

  28. 28

    将图像转换为base64

  29. 29

    如何在Monodroid中将位图图像转换为Base64PNG字符串

热门标签

归档