- while(fgets(str, 128, rfp)){
- for(sp = str; *sp; ){
- if( (*sp == '\r') || (*sp == '\n') ) break;
- value = get_base64_char_value(*sp++) * 64 * 64 * 64;
- ret = get_base64_char_value(*sp++);
- value += ret * 64 * 64;
- ret = get_base64_char_value(*sp++);
- if(ret >= 0){
- value += ret * 64;
- ret = get_base64_char_value(*sp++);
- if(ret >= 0){
- value += ret;
- fwrite(&buf[1], 1, 3, wfp);
- }
- else{
- fwrite(&buf[1], 1, 2, wfp);
+ while (fgets(str, 128, rfp)) {
+ for (sp = str; *sp; ) {
+ if ((*sp == '\r') || (*sp == '\n')) break;
+ v1 = get_base64_char_value(*sp++);
+ v2 = get_base64_char_value(*sp++);
+ if (0 <= (v3 = get_base64_char_value(*sp++))) {
+ if (0 <= (v4 = get_base64_char_value(*sp++))) {
+ o1 = (v1 << 2) + (v2 >> 4);
+ o2 = ((v2 & 0x0f) << 4) + (v3 >> 2);
+ o3 = ((v3 & 0x03) << 6) + v4;
+ putc(o1, wfp);
+ putc(o2, wfp);
+ putc(o3, wfp);
+ }
+ else {
+ o1 = (v1 << 2) + (v2 >> 4);
+ o2 = ((v2 & 0x0f) << 4) + (v3 >> 2);
+ putc(o1, wfp);
+ putc(o2, wfp);