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

📄 utf8_u.c

📁 utf-8和unicode的互转的c代码
💻 C
字号:
#include <stdio.h>
#include "uni_utf8.h"
#define ENDIAN 0
int main(int argc, char *argv[])
{
	unsigned int utf8;
	unsigned short uni;
	unsigned int utf;
	unsigned int c = 0;	unsigned char next[] = {0, 0, 0, 0};	char *pn = next;
	char *p;	char *pp;
	int cc = 0;	int i = 4;	int len;
	int count = 0, cou = 0;
	if(argc < 2)
	{
		printf("\nusage: u2utf8 hex( >= 0) \n\te.g. u2utf 7063\n\n");
		return -1;
	}
	if(argv[1][0] == '-')
	{
		printf("\n negative is not allowed!");
		return -1;
	}
	if(argv[1][0] == '0' && (argv[1][1] == 'x' || (argv[1][1] == 'X')))
	{
		p = argv[1] + 2;
		while(*p)
		{
			count ++;
			//printf("%x \t", *p);
			p ++;

		}
		p--;
		if(count <= 0)
		{
			printf("illegal!\n");
			return;
		}
		//printf("count = %d\n", count);
		for(;count > 0; count --)
		{
			//printf("count = %d\n", count);
			if(*p >= '0' && *p <= '9')
			{
				cc = *p - '0';
			}
			else if(*p >= 'A' && *p <= 'F')
			{
				cc = *p - 'A' + 10;
			}
			else if(*p >= 'a' && *p <= 'f')
			{
				cc = *p - 'a' + 10;
			}
			else
			{
				printf("illegal char\n");
				return -1;
			}

			c |= cc << (4 * (cou ++));
			p --;
		}
		printf("%x \t", c);
		if(c > 0xffff)
		{
			printf("\n%d is too big!\n");
			return -1;
		}
		uni = c;
	}
	else
	{
		c = atoi(argv[1]);
		if(c > 0xffff)
		{
			printf("\n%d is too big!\n");
			return -1;
		}
		uni = c;
	}

#if ENDIAN
	uni = (uni << 8) | (uni >> 8);
#endif
	utf8 = u2utf8(uni);
	printf("u-%x--->utf-8:0x%x\n", uni, utf8);	pp = (char *)&utf8 + 3;////**/	while(*pp == 0 && i > 0)	{
			pp --;			i --;	}	if(i <= 0)		return -1;	while(i)	{		*pn++ = *pp--;////**/		i--;	}
	printf("%d: %x %x %x %x\n", i, next[0], next[1], next[2], next[3]);	len = utf82u(next, &utf);	printf("%d --0x%x\n", len, utf);
	return 0;
}

⌨️ 快捷键说明

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