二进制数组到base64

时间:2017-01-16 15:08:34

标签: c arrays sockets base64 binaryfiles

如何通过UNIX套接字发送example.wav文件字节编码的base64?

Project-->Properties-->Builders

这是我从文件中读取的内容。 现在我需要从这个数组中获取字符串或东西,因为我需要编码,当我尝试:

char* readFileBytes(const char *name){
 FILE *fl = fopen(name, "rb");
 fseek(fl, 0, SEEK_END);
 long len = ftell(fl);
 char *ret = malloc(len);
 fseek(fl, 0, SEEK_SET);
 fread(ret, 1, len, fl);
 fclose(fl);
 return ret;
}

程序仅对RIFF�3进行编码。

我可以做循环

printf("%s\n", ret);
Output: RIFF�3

然后我得到更有趣的东西,但是,我怎么能编码整个二进制数组。 稍后我将通过UNIX套接字发送编码字符串,但不是ATM。

EDITED产品:> 我使用http://fm4dd.com/programming/base64/base64_stringencode_c.htm算法进行编码。这对二进制文件有误吗?

1 个答案:

答案 0 :(得分:0)

您正在使用的功能(b64_encode)只能编码字符串。 确保修改该函数,使其迭代缓冲区中的所有字符。

也许这样的东西会起作用(我没有测试过代码):

/* encode - base64 encode a stream, adding padding if needed */
void b64_encode(char *clrstr, int length, char *b64dst) {
  unsigned char in[3];
  int i, len = 0;
  int j = 0;

  b64dst[0] = '\0';
  while(j<length) {
    len = 0;
    for(i=0; i<3; i++) {
     in[i] = (unsigned char) clrstr[j];
     if(j<length) {
        len++; j++;
      }
      else in[i] = 0;
    }
    if( len ) {
      encodeblock( in, b64dst, len );
    }
  }
}