0
私は、Cで単純なBase64デコード関数を書いています。この関数の出力はprintf()デバッグ行を以下のように使ったときに正しいと見なされます(C値が保持されない配列
)。 (部分)の出力を生成しunsigned char * b64decode(char *line)
{
char *idx;
unsigned char *decode;
int i,j,len,dlen,hold = 0;
idx = strchr(line, '\n'); //index of newline
len = idx - line; //lenght of string
dlen = 3 * (len/4); //decoded length
decode = malloc((sizeof(unsigned char) * dlen) + 1);
pad = 0;
for (i = 0; i <= len; i++) { //deindex from ASCII
line[i] = deindex(line[i]);
}
for(i = 0, j = u0; i < len; i++,j++) {
hold |= (line[i] << 18);
hold |= (line[++i] << 12);
hold |= (line[++i] << 6);
hold |= line[++i];
decode[j] = hold >> 16;
printf("%d ", decode[j]);
decode[++j] = (hold >> 8) & 0xFF;
printf("%d ", decode[j]);
decode[++j] = hold & 0xFF;
printf("%d ", decode[j]);
hold = 0;
}
if (pad) //terminate before padding
decode[dlen - pad] = '\0';
return decode;
}
:私はそれらのprintf()の行でループのために出た後で、この配列にアクセスしようとすると、
29 66 31 77 11 15 2 31 79 19 78 60 26 105 101 31 73 28 14 78 19 1 11 7
78 27 1 22 69 54 0 30 1 73 100 32 84 29 29 67 51 83 78 101 82 6 0 71 84
28 13 69 77 7 4 12 83 18 60 12 30 8 73 26 9 17 79 20 76 33 26 71 43 0 5
29 71 89 17 4 9 0 100 38 7 83 0 55 22 6 12 26 23 65 29 1 82 84 48 95 0 32
19 10 5 71 79 18 72 8 69 78 101
問題が発生します。ループのためのこの(i値の最大は任意)...
for (i = 0; i < 100; i++) {
printf("%d ", decode[i]);
}
はこの出力を生成します...
29 66 31 77 11 15 2 31 79 19 78 60 26 105 101 31 73 28 14 78 19 1 11 7 78
27 1 22 69 54 0 30 1 73 100 32 84 29 29 67 51 83 78 101 82 6 0 71 84 28
13 69 77 7 4 12 83 18 60 12 30 8 73 26 9 17 79 20 76 33 26 71 43 0 5 29
71 89 17 4 9 0 100 38 7 83 0 55 22 6 12 26 23 65 29 1 82 84 48 95 0 32 19
10 5 71 79 168 187 158 23 131 127 0 0 168 187 158 23 131 127 0 0 0 0 0 0
0 0 0 0 65 0 0 0 0 0 0 0 88 187 158 23 131 127 0 0 88 187 158 23 131 127
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0
0 0 0 0 0 0 16 16 0 0 0 0 0 0 72 85 73 102
誰も私が私が間違ってやっている知っていることはできますか?
実際の作業コードを表示します。 – DevilaN
'j = u0'とは何ですか? –
[mcve]があります。しかし、それが価値あるものだとすれば、データの末尾があなたが提示した機能の外側に詰まっていなければならないと私には思われます。 –