取得汉语拼音首个字母

2023-12-29 06:30

本文主要是介绍取得汉语拼音首个字母,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

byte数组转float 以及byte转其他类型时为什么要&0xff

public static float getFloat(byte[] b) {  

      int accum = 0;  

       accum = accum|(b[0] & 0xff) << 0; 

       accum = accum|(b[1] & 0xff) << 8;  

       accum = accum|(b[2] & 0xff) << 16;  

      accum = accum|(b[3] & 0xff) << 24;  

       System.out.println(accum); 

       return Float.intBitsToFloat(accum);  

 

java中byte转换int时为何与0xff进行与运算

 

在剖析该问题前请看如下代码

 public static String bytes2HexString(byte[] b) {

   String ret = "";

   for (int i = 0; i < b.length; i++) {

     String hex = Integer.toHexString(b[i] & 0xFF);

     if (hex.length() == 1) {

       hex = ''0'' + hex;

     }

       ret += hex.toUpperCase();

    }

      return ret;

  }

上面是将byte[]转化十六进制的字符串,注意这里b[i] & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出

b[i] & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[i]);,将byte强转为int不行吗?答案是不行的.

 

其原因在于:

1.byte的大小为8bits而int的大小为32bits

 2.java的二进制采用的是补码形式

 

在这里先温习下计算机基础理论

 

byte是一个字节保存的,有8个位,即8个0、1。

8位的第一个位是符号位,

也就是说0000 0001代表的是数字1

 1000 0001代表的就是-1

所以正数最大位0111 1111,也就是数字127

负数最大为1111 1111,也就是数字-128

上面说的是二进制原码,但是在java中采用的是补码的形式,下面介绍下什么是补码

 

 

1、反码:

        一个数如果是正,则它的反码与原码相同;

        一个数如果是负,则符号位为1,其余各位是对原码取反;

2、补码:利用溢出,我们可以将减法变成加法

       对于十进制数,从9得到5可用减法:

       9-4=5    因为4+6=10,我们可以将6作为4的补数

       改写为加法:

       9+6=15(去掉高位1,也就是减10)得到5.

       对于十六进制数,从c到5可用减法:

       c-7=5    因为7+9=16 将9作为7的补数

       改写为加法:

       c+9=15(去掉高位1,也就是减16)得到5.

    在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为(1 0000 0000),进位1被丢弃。

    ⑴一个数为正,则它的原码、反码、补码相同

    ⑵一个数为负,刚符号位为1,其余各位是对原码取反,然后整个数加1

  - 1的原码为                1000 0001 

  - 1的反码为                1111 1110 

                                                    + 1

  - 1的补码为                1111 1111 

 

  0的原码为                 0000 0000

  0的反码为                 1111 1111(正零和负零的反码相同)

                                          +1

  0的补码为               10000 0000(舍掉打头的1,正零和负零的补码相同)

Integer.toHexString的参数是int,如果不进行&0xff,那么当一个byte会转换成int时,由于int是32位,而byte只有8位这时会进行补位。

例如补码1111 1111的十进制数为-1转换为int时变为11111111111111111111111111111111好多1啊,呵呵!即0xffffffff但是这个数是不对的,这种补位就会造成误差。和0xff相与后,高24比特就会被清0了,结果就对了。

 

了解这个基础后回归正题:

public static String getPinYinHead(char c) {String s = String.valueOf(c);byte[] b;try {b = s.getBytes("GBK");} catch (UnsupportedEncodingException e) {b = s.getBytes();}if (b.length >= 2) {int b1 = b[0] & 0xff;int b2 = b[1] & 0xff;int value = b1 << 8 | b2;if (value >= 0xb0a1 && value <= 0xb0c4) {return "A";} else if (value >= 0xb0c5 && value <= 0xb2c0) {return "B";} else if (value >= 0xb2c1 && value <= 0xb4ed) {return "C";} else if (value >= 0xb4ee && value <= 0xb6e9) {return "D";} else if (value >= 0xb6ea && value <= 0xb7a1) {return "E";} else if (value >= 0xb7a2 && value <= 0xb8c0) {return "F";} else if (value >= 0xb8c1 && value <= 0xb9fd) {return "G";} else if (value >= 0xb9fe && value <= 0xbbf6) {return "H";} else if (value >= 0xbbf7 && value <= 0xbfa5) {return "J";} else if (value >= 0xbfa6 && value <= 0xc0ab) {return "K";} else if (value >= 0xc0ac && value <= 0xc2e7) {return "L";} else if (value >= 0xc2e8 && value <= 0xc4c2) {return "M";} else if (value >= 0xc4c3 && value <= 0xc5b5) {return "N";} else if (value >= 0xc5b6 && value <= 0xc5bd) {return "O";} else if (value >= 0xc5be && value <= 0xc6d9) {return "P";} else if (value >= 0xc6da && value <= 0xc8ba) {return "Q";} else if (value >= 0xc8bb && value <= 0xc8f5) {return "R";} else if (value >= 0xc8f6 && value <= 0xcbf9) {return "S";} else if (value >= 0xcbfa && value <= 0xcdd9) {return "T";} else if (value >= 0xcdda && value <= 0xcef3) {return "W";} else if (value >= 0xcef4 && value <= 0xd188) {return "X";} else if (value >= 0xd1b9 && value <= 0xd4d0) {return "Y";} else if (value >= 0xd4d1 && value <= 0xd7f9) {return "Z";}}return s;}

下面只是编码表一部分:

  

转载于:https://www.cnblogs.com/cangqiongbingchen/p/5019867.html

这篇关于取得汉语拼音首个字母的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/548620

相关文章

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

兔子--EditText去除下划线和输入字母和数字的限制

在设置密码输入框的时候,只允许输入数字和字母,设置如下属性:  android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 设置密码不可见(显示小黑点),并去除edittext的获取到焦点时候的下划线, 设置如下:

每日一题~cf 970 div3 (A思维,B小模拟,C二分,D排列数建图成环,E 26个字母暴力+前缀和,F 逆元,G 数论gcd )

A 题意: 有 a 个1 ,b 个2.问是否能将这些数划分为两个数值相等的集合。 输出 YES 或者 NO —————— 问题等价于 将数组 分成两个数值相同的数组。所以sum 应该是偶数。也就是说 1 的个数是偶数。在i1的个数是偶数的情况下,将 2 分成两份,如果2 的个数是偶数,OK。如果是奇数那么需要1来补齐,如果1 的个数大于等于2那么可以补齐。(1 的个数是偶数,需要2个1来补齐,剩下

Aloudata AIR :国内首个 Data Fabric 逻辑数据平台

AIR 的寓意是“极致轻盈的数据交付”:A - Adaptive 自适应,I - Integration 集成,R - Resilience 弹性 News:Aloudata AIR 发布 作为国内首个 Data Fabric 逻辑数据平台,Aloudata AIR 通过自研的数据虚拟化技术,轻松实现多源异构数据的集成整合和自适应加速,为 Data Fabric 数据架构理念在国内的实践落地开辟

LeetCode438. 找到字符串中所有字母异位词(2024秋季每日一题 11)

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 示例 1: 输入: s = “cbaebabacd”, p = “abc” 输出: [0,6] 解释: 起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。 起始索引等于 6 的子串是

智源研究院推出全球首个包含文生视频的模型对战评测服务

2024年9月4日,智源研究院推出全球首个包含文生视频的面向用户开放的模型对战评测服务——FlagEval大模型角斗场,覆盖国内外约40款大模型,支持语言问答、多模态图文理解、文生图、文生视频四大任务的自定义在线或离线盲测,包含简单理解、知识应用、代码能力、推理能力多种预设问题。除网页端,该服务还率先开放了国内首个移动端访问入口,为用户提供高效便捷的模型对战评测体验。 秉承FlagEval评

正则:数字、字母、特殊字符同时存在且长度不小于8位

(?![^a-zA-Z]+$)(?!\D+$)(?![a-zA-Z0-9]+$).{8,}$ 使用示例: function valPasswordFormatNew(){var result = true;var newPsd = jQuery("#newPsd").val();if(newPsd !=""){result = (/(?![^a-zA-Z]+$)(?!\D+$)(?![a-zA