view src/u8tbl.c @ 9285:8320c9c4620f

<oerjan> learn Umlaut is German for "hum aloud", an important feature of the German language. It is indicated by putting two dots over the vowel of the syllable.
author HackBot
date Sat, 15 Oct 2016 00:04:47 +0000
parents 8ddd6d5dc480
children
line wrap: on
line source

#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');
	}
}