diff src/u8tbl.c @ 6368:8ddd6d5dc480

<oerjan> ` mv u8tbl bin; mv u8tbl.c src
author HackBot
date Thu, 10 Dec 2015 02:48:22 +0000
parents u8tbl.c@8e6c7372226d
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/u8tbl.c	Thu Dec 10 02:48:22 2015 +0000
@@ -0,0 +1,45 @@
+#include "stdio.h"
+#include "stdlib.h"
+
+char *int2u8(unsigned U){
+	static char out[7];
+	int i=0;
+	if(U<=0x80)out[i++]=U;
+	else if(U<0x800){
+		out[i++]=(U>>6|0xC0);
+		out[i++]=(U&0x3f|0x80);
+	}else if(U<=0x10000){
+		out[i++]=(U>>12|0xE0);
+		out[i++]=(U>>6&0x3f|0x80);
+		out[i++]=(U&0x3f|0x80);
+	}else if(U<=0x200000){
+		out[i++]=(U>>18|0xF0);
+		out[i++]=(U>>12&0x3f|0x80);
+		out[i++]=(U>>6&0x3f|0x80);
+		out[i++]=(U&0x3f|0x80);
+	}else if(U<=0x4000000){
+		out[i++]=(U>>24|0xF8);
+		out[i++]=(U>>18&0x3f|0x80);
+		out[i++]=(U>>12&0x3f|0x80);
+		out[i++]=(U>>6&0x3f|0x80);
+		out[i++]=(U&0x3f|0x80);
+	}else if(U<=0x80000000){
+		out[i++]=(U>>30|0xFC);
+		out[i++]=(U>>24&0x3f|0x80);
+		out[i++]=(U>>18&0x3f|0x80);
+		out[i++]=(U>>12&0x3f|0x80);
+		out[i++]=(U>>6&0x3f|0x80);
+		out[i++]=(U&0x3f|0x80);
+	}
+	out[i]=0;
+	return out;
+}
+
+int main(int argc,char **argv){
+	int i = strtol(argv[1],0,0);
+	int m = strtol(argv[2],0,0);
+	for(;i<=m;i++){
+		printf("%s",int2u8(i));
+		if(i%16==15)putchar('\n');
+	}
+}