2021-03-23

UTF-8字符切分||C语言实现

我只给出一个大概的思路,具体实现代码不方便透露
在我们切分字符时,最重要的是我们需要知道单个字符的长度,但是由于utf-8的特殊性,我们没法用一个固定的长度去切分字符,所以我们怎么知道字符的长度就显得很重要了,以下代码用于获取单个文字的字节长:

#include"stdio.h"
int main()
{   char ch,strs[12];
    int byte;
    ch=getchar();//取第一个字节,判断第一个字节的形式,我们就能够分析这个字符的大小,从而通过其大小去切分一个文字
    if(~(int)ch <= 0)//1字节 //将二进制数按位取反,判断数的大小,通过数的大小来取文字即可完成字符的切分,这样排序是因为这样有助于代码编写
        byte = 1;
    else if(~(int)ch <= 4)//6字节
        byte = 6;
    else if(~(int)ch <= 8)//5字节
        byte = 5;
    else if(~(int)ch <= 16)//4字节
        byte = 4;
    else if(~(int)ch <= 32)//3字节
        byte = 3;
    else if(~(int)ch <= 64)//2字节
        byte = 2;
    printf("占用%d字节\n",byte);
    return 0;
}

思路:由于在utf-8编码格式下单个字符的字节长度和第一个字节编码相关
因此能通过判断其值的大小来判断该文字的字节长度从而为切分文字提供方便

  1个字节 0xxxxxxx                                                     0xxxxxxx 取反是负数
  2个字节 110xxxxx 10xxxxxx                                            110xxxxx 取反小于等于64
  3个字节 1110xxxx 10xxxxxx 10xxxxxx                                   1110xxxx 取反小于等于32
  4个字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx                          11110xxx 取反小于等于16
  5个字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx                 111110xx 取反小于等于8
  6个字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx        1111110x 取反小于等于4

背景:
最近由于想要学着编写一点Linux的软件,在我打算装个双系统的时候,我发现怎么也打不开U盘装系统,开始我以为是我的U盘没制作好,于是我换了一个系统宠幸制作了个镜像(别问我为啥不用虚拟机,因为我最近都会在Linux环境下开发,如果都用虚拟机的话相当的不方便,所以打算将Linux作为电脑开机的首选项),但是我发现无论我怎么弄都打不开BIOS界面,我就觉得有点问题了,百度发现这是win10的原因——因为Win10都采用了全新的快速启动模式,让开机速度更快,直接跳过BIOS部分进入系统。但是在win10启动过程中按键是处于失效的状态,我觉得这是win10 的霸道条款,所以一气之下将win环境改为deepin20桌面环境,但是在编程中发现原来在win环境中的文字切分的函数失效了,因此重写了该函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值