【发布时间】:2015-03-26 11:25:42
【问题描述】:
我是编程新手,正在尝试将十进制数转换为 base64 并再次转换回来。我的代码的编码部分有效,但我无法让解码部分正常工作。有人可以帮忙吗?
/*
============================================================================
Name : base64.c
Author : Peter Doyle
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
static char *base64enc(long unsigned int value)
{
char base64[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/* log(2**64) / log(64) = 12.38 => max 13 char + '\0' */
char buffer[12];
unsigned int offset = sizeof(buffer);
buffer[--offset] = '\0';
do {
buffer[--offset] = base36[value % 64];
} while (value /= 64);
return strdup(&buffer[offset]);
}
int base2base(unsigned char in[], int basein, int baseout)
{
int J;
int K;
int DecimalValue;
int InputNumberLength;
//unsigned char OutputValue[];
unsigned char NumericBaseData[]={"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"};
//convert input number to base 10.
InputNumberLength = sizeof(in);
DecimalValue = 0;
for (J = 0; J < InputNumberLength; J++){
for (K = 0; K < basein; K++){
char sub1;
char sub2;
char inJ = (in+J);
char NumericBaseDataK = (NumericBaseData+K);
strncpy(sub1, inJ, 1);
strncpy(sub2, NumericBaseDataK, 1);
if (sub1 == sub2){
int Calc = ((K-1)*(pow(basein,(InputNumberLength-J)))+.5);
DecimalValue = DecimalValue+Calc;
}
}
}
return DecimalValue;
}
int main(void) {
long unsigned int test = 6000;
char *encoded = base36enc(test);
puts(encoded);
base2base(encoded, 64, 10);
printf("%d\n", DecimalValue);
return EXIT_SUCCESS;
【问题讨论】:
-
您遇到什么错误?
-
你是在base 36还是base 64编码?请选择一个。
-
我想这可能就是你要找的东西:stackoverflow.com/a/9197570/4707373 ?
-
@MalteR 我认为 OP 只对适合的情况感兴趣。
-
^是 XOR 运算符。