stc日常分享-utf8字库制作

 C语言 安卓生成utf8.txt字库

安卓根目录-绝对路径

需要声明头文件 #include<stdio.h> 

FILE *fpWrite=fopen("/storage/emulated/0/366/data.txt","a+");//创建一个文件类型的指针,对文件以可写的权限打开

if(fpWrite==NULL) {  //判断文件指针是否存在,不存在就退出
        printf("路径错误!");
        return 0;
    }

 fprintf(fpWrite,"%c",utf8_bin[0]); //把utf8_bin[0])中的变量写入文件


 

操作模式解释
r打开一个已有的文本文件,允许读取文件。
w打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+打开一个文本文件,允许读写文件。
w+打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
#include<stdio.h>
#include<string.h>



unsigned char utf8_bin[4]; //申明一个字节 char类型的数组
unsigned int txt[11];
unsigned char utf8_bin_temp_u8;//申明一个字节的缓存变量
unsigned short utf8_bin_temp_u16; //申明2字节的缓存变量 更具操作系统选择变量类型
void utf8_to_bin(unsigned int byte) { //输入四个字节的整数 将转换后的结果储存在utf8_bin[4]数组中

    if(byte<=127) { //转换长度为一个字节的整数
        utf8_bin[0]=byte;
    };//1字节
    if(128<=byte && byte<=2047) { //转换长度为2字节的整数
        utf8_bin[0]=utf8_bin[0]|0xc0;
        utf8_bin[0]=utf8_bin[0]|byte>>6;
        utf8_bin_temp_u8=byte;
        utf8_bin_temp_u8=utf8_bin_temp_u8<<2;
        utf8_bin_temp_u8=utf8_bin_temp_u8>>2;
        utf8_bin[1]=utf8_bin[1]|0x80;
        utf8_bin[1]=utf8_bin[1]|utf8_bin_temp_u8;
    }
    if(2048<=byte && byte<=65535) { //转换长度为3字节的整数
        utf8_bin[0]=utf8_bin[0]|0xe0;
        utf8_bin[0]=utf8_bin[0]|(byte>>12);
        utf8_bin_temp_u16=byte;
        utf8_bin_temp_u16=utf8_bin_temp_u16<<4;
        utf8_bin_temp_u16=utf8_bin_temp_u16>>10;
        utf8_bin[1]=utf8_bin[1]|0x80;
        utf8_bin[1]=utf8_bin[1]|utf8_bin_temp_u16;
        utf8_bin_temp_u8=byte;
        utf8_bin_temp_u8=utf8_bin_temp_u8<<2;
        utf8_bin_temp_u8=utf8_bin_temp_u8>>2;
        utf8_bin[2]=utf8_bin[2]|0x80;
        utf8_bin[2]=utf8_bin[2]|utf8_bin_temp_u8;


    }
//if(65536<=byte && byte<=1114111){}//转换长度为四字节的整数
}
int main()
{
    txt[0]=26149;
    txt[1]=30496;
    txt[2]=19981;
    txt[3]=35273;
    txt[4]=26195;
    txt[5]=65292;
    txt[6]=22788;
    txt[7]=22788;
    txt[8]=38395;
    txt[9]=21884;
    txt[10]=40479;
    char str1[100];//这个数组是用于输入文件
    FILE *fpWrite=fopen("/storage/emulated/0/366/data.txt","a+");//创建一个文件类型的指针,对文件以可写的权限打开


    if(fpWrite==NULL) {
        printf("路径错误!");
        return 0;
    }
    //

    printf("请输入你要写进data文件的内容:");
    //gets(str1);//输入对应数据

    for(int i=33; i<128; i++) {
        utf8_to_bin(i);

        fprintf(fpWrite,"%c",utf8_bin[0]);//打印显示出刚刚写入的文件


    }


    for(int i=128; i<2048; i++) {
        utf8_to_bin(i);
        for(int ii=0; ii<2; ii++) {
            fprintf(fpWrite,"%c",utf8_bin[ii]);//打印显示出刚刚写入的文件
        }

    }

    for(int i=2048; i<65536; i++) {
        utf8_to_bin(i);
        for(int ii=0; ii<3; ii++) {
            fprintf(fpWrite,"%c",utf8_bin[ii]);//打印显示出刚刚写入的文件
        }

    }

    fclose(fpWrite);//将创建的指针删除
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值