⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uudecode.c

📁 在阳初s3c2410上实现的uudecode协议
💻 C
字号:
/*	UUDECODE - a Win32 utility to uudecode single files.
 *
 *	Copyright (C) 1998 Clem Dye
 *
 *	Modified by Sword Du	
 *	Data: Nov 27, 2007
 */

#include "uudecode.h"

int uudecode(char* src, char* dest)
{
	int n;
	char* dest_bgn = dest;

	while (1) {
		switch(*src) {
			case '\r':
			case '\n':
				src++;
				break;

			case 'b':
				if (str_ncmp(src, "begin", 5) == 0) {
					while (*src++ != '\r');
					break;
				}
				return -1; // begin not match

			case 'e':
				if (str_ncmp(src, "end", 3) == 0)
					return ((dest - dest_bgn) / sizeof(char)); // success to decode
				return -2; // end not match

			default:
				n = DEC(*src);
				if (n < 0)
					return -3; // lenght invalid
				
				for (src++; n > 0; src += 4, n -= 3) {
					if (n >= 3) {
						*dest++ = DEC(src[0]) << 2 | DEC(src[1]) >> 4;
						*dest++ = DEC(src[1]) << 4 | DEC(src[2]) >> 2;
						*dest++ = DEC(src[2]) << 6 | DEC(src[3]);
					} else {
						if (n >= 1)
							*dest++ = DEC(src[0]) << 2 | DEC(src[1]) >> 4;
						if (n >= 2)
							*dest++ = DEC(src[1]) << 4 | DEC(src[2]) >> 2;
					}
				}				
				break;
		}
	}
	
	return -4;
}

/*
int main(int argc, char *argv[])
{
	FILE *f;
	int i, len;
	char ch, data[10000];

	if (argc <= 1) {
		printf("Don't type source file\n");
		return -1;
	}

	if ((f = fopen(argv[1], "rb"))== NULL) {
		printf("I can't find %s\n", argv[1]);
		return -2;
	}

	i = 0;
	while ((ch = fgetc(f)) != 'd')
		data[i++] = ch;
	data[i] = 'd';

	if ((len = uudecode(data, data)) < 0)
		return -3;

	fclose(f);

	f = fopen(argv[2], "wb");
	if (f == NULL) {
		printf("I can't find %s\n", argv[2]);
		return -4;
	}

	i = 0;
	while (i < len)
		fputc(data[i++], f);

	fclose(f);
	printf("Result decoded in %s\n", argv[2]);

	return 0;

}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -