首页 > 编程语言 >C#中如何获得汉字的区位码?

C#中如何获得汉字的区位码?

时间:2023-10-14 09:56:19浏览次数:33  
标签:机内码 字节 C# 区位码 System 汉字 int GetBytes

1、区位码转换为国标码方法如下:

国标码高位字节=(区号)H+20H

国标码低位字节=(位号)H+20H

 

2、国标码转换为机内码方法如下:

机内码高位字节=(国标码)H+80H

机内码低位字节=(国标码)H+80H

 

3、区位码转换为机内码方法如下:

可见,区位码到机内码加了两次:20H + 80H = 32 + 128 = 160 =  A0H

因此,区位码转换机内码的方法,是加160。

机内码高位字节=(区号)H+A0H

机内码低位字节=(位号)H+A0H

 

反之,机内码转换区位码的方法,是减160。

注意:计算机使用的字符都为机内码!

 

要获取字符对应的为字节序列。可以通过Encoding类的Default属性和GetBytes( )方法来实现。Encoding类的Default属性为Encoding对象。

GetBytes( )方法声明如下:

public virtual byte[] GetBytes(

       char[] chars

)

 

public virtual byte[] GetBytes(

       string s

)

 

public virtual byte[] GetBytes(

       char[] chars,

       int index,

       int count

)

 

[CLSCompliantAttribute(false)]

[ComVisibleAttribute(false)]

public virtual int GetBytes(

       char* chars,

       int charCount,

       byte* bytes,

       int byteCount

)

 

public abstract int GetBytes(

       char[] chars,

       int charIndex,

       int charCount,

       byte[] bytes,

       int byteIndex

)

参数

chars

类型:System.Char[]

包含要编码的字符集的字符数组。

charIndex

类型:System.Int32

第一个要编码的字符的索引。

charCount

类型:System.Int32

要编码的字符的数目。

bytes

类型:System.Byte[]

要包含所产生的字节序列的字节数组。

byteIndex

类型:System.Int32

开始写入所产生的字节序列的索引位置。

返回值

类型:System.Int32

写入 bytes 的实际字节数。

 

public virtual int GetBytes(

       string s,

       int charIndex,

       int charCount,

       byte[] bytes,

       int byteIndex

)

参数

s

类型:System.String

包含要编码的字符集的 String。

charIndex

类型:System.Int32

第一个要编码的字符的索引。

charCount

类型:System.Int32

要编码的字符的数目。

bytes

类型:System.Byte[]

要包含所产生的字节序列的字节数组。

byteIndex

类型:System.Int32

开始写入所产生的字节序列的索引位置。

返回值

类型:System.Int32

写入 bytes 的实际字节数。

 

      为了便于理解,以下提供区位码部分截图:

(1)、01区

01 0 1 2 3 4 5 6 7 8 9
0     、 。 · ˉ ˇ ¨ 〃 々
1 — ~ ‖ … ‘ ’ “ ” 〔 〕
2 〈 〉 《 》 「 」 『 』 〖 〗
3 【 】 ± × ÷ ∶ ∧ ∨ ∑ ∏
4 ∪ ∩ ∈ ∷ √ ⊥ ∥ ∠ ⌒ ⊙
5 ∫ ∮ ≡ ≌ ≈ ∽ ∝ ≠ ≮ ≯
6 ≤ ≥ ∞ ∵ ∴ ♂ ♀ ° ′ ″
7 ℃ $ ¤ ¢ £ ‰ § № ☆ ★
8 ○ ● ◎ ◇ ◆ □ ■ △ ▲ ※
9 → ← ↑ ↓ 〓
 

(2)、02区

02 0 1 2 3 4 5 6 7 8 9
0   ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ
1 ⅹ       ⒈ ⒉ ⒊
2 ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔
3 ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⑴ ⑵ ⑶
4 ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀
5 ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ① ② ③
6 ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩   ㈠
7 ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ 
8  Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ
9 Ⅹ Ⅺ Ⅻ  

 

(3)、17区

 

 

17 0 1 2 3 4 5 6 7 8 9
0   薄 雹 保 堡 饱 宝 抱 报 暴
1 豹 鲍 爆 杯 碑 悲 卑 北 辈 背
2 贝 钡 倍 狈 备 惫 焙 被 奔 苯
3 本 笨 崩 绷 甭 泵 蹦 迸 逼 鼻
4 比 鄙 笔 彼 碧 蓖 蔽 毕 毙 毖
5 币 庇 痹 闭 敝 弊 必 辟 壁 臂
6 避 陛 鞭 边 编 贬 扁 便 变 卞
7 辨 辩 辫 遍 标 彪 膘 表 鳖 憋
8 别 瘪 彬 斌 濒 滨 宾 摈 兵 冰
9 柄 丙 秉 饼 炳

 

      本例的关键代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text; //引用Encoding

using System.Windows.Forms;

 

private void button1_Click(object sender, EventArgs e)

{

    try

    {

        if (textBox1.Text == "")

        {

            MessageBox.Show("必须先输入汉字", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            textBox1.Focus();

        }

        else

        {

            byte[] array = new byte[2];

            array = System.Text.Encoding.Default.GetBytes("" + textBox1.Text.Trim() + "");

            int front =(short)(array[0]-'\0');

            int back =(short)(array[1]-'\0');

 

            //计算机使用的字符都为机内码!

            //即Encoding类的GetBytes()返回值对应机内码

            //机内码转换区位码的方法,是减160

            int front1 = front - 160;

            int back1 = back - 160;

 

            string strFront1, strBack1;

            if (front1 > 9)

                strFront1 = Convert.ToString(front1);

            else

                strFront1 = "0" + Convert.ToString(front1);

            if (back1 > 9)

                strBack1 = Convert.ToString(back1);

            else

                strBack1 = "0" + Convert.ToString(back1);

 

            textBox2.Text = strFront1 + strBack1;

        }

    }

    catch

    {

        MessageBox.Show("输入有误,请重新输入", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

        textBox1.Text = "";

        textBox1.Focus();

    }

}

标签:机内码,字节,C#,区位码,System,汉字,int,GetBytes
From: https://www.cnblogs.com/it001xyz/p/17763720.html

相关文章

  • label-studio docker-compose 运行试用
    label-studio是一个支持多格式的数据标注工具,以下是基于docker-compose运行的试用环境准备docker-composeversion:"3.9"services:nginx:image:heartexlabs/label-studio:latestports:-"8080:8085"-"8081:8086"......
  • 解密Prompt系列17. LLM对齐方案再升级 WizardLM & BackTranslation & SELF-ALIGN
    话接上文的指令微调的样本优化方案,上一章是通过多样性筛选和质量过滤,对样本量进行缩减,主打经济实惠。这一章是通过扩写,改写,以及回译等半监督样本挖掘方案对种子样本进行扩充,提高种子指令样本的多样性和复杂度,这里我们分别介绍Microsoft,Meta和IBM提出的三个方案。Microsoft:WizardL......
  • BeanUtils.copyProperties这个方法是深拷贝浅拷贝,还是深复制浅复制?
    1、关于BeanUtils.copyProperties方法的拷贝类型,它是浅拷贝哦。这意味着在拷贝对象时,它只会复制对象的引用而不会复制对象的内容。所以,如果原始对象中的某个属性发生改变,拷贝后的对象中的相应属性也会随之改变。当然,如果你希望进行深拷贝或深复制,需要使用其他方法来实现哦`BeanUt......
  • 基于Win 自带的.NET FrameWork平台,使用文本文件编写C#代码,命令行编译以及引用第三方库
    转载自https://www.infoq.cn/article/2015/12/visual-studio-windows 不用VisualStudio也能开发.NETWindows应用邵思华2015-12-29本文字数:2915字阅读完需:约10分钟对于.NET应用的开发人员而言,以VisualStudio(简称VS)作为首选的开发工具应当是一种最......
  • C++四舍五入
    C++四舍五入1.利用C++输出函数cout<<setprecision(4)<<1.94999<<endl;只使用setprecision:控制浮点数的输出位数,注意控制的是总输出的数字个数,不是小数点后,并且将默认将小数后面的末尾0省略,并且将四舍五入cout<<fixed<<setprecision(2)<<1.48999<<endl;使用fixedsetprecisi......
  • [USACO] Piggy Back
    [USACO]PiggyBack题目大概意思是一个无向图,Bessie从1号仓库走到n号(每次花费x),Elsie从2号仓库走到n号(每次花费y),如果两个人走同一条路花费z,求总花费最小。跑三遍最短路,别得到Bessie从1号仓库出发的最短路,Elsie从2号仓库出发的最短路,和从n出发到其他每......
  • 14.4 Socket 双向数据通信
    所谓双向数据传输指的是客户端与服务端之间可以无差异的实现数据交互,此类功能实现的核心原理是通过创建CreateThread()函数多线程分别接收和发送数据包,这样一旦套接字被建立则两者都可以异步发送消息,本章将实现简单的双向交互功能。首先我们需要封装两个函数,这里RecvFunction函数......
  • P7450 [THUSCH2017] 巧克力
    P7450[THUSCH2017]巧克力题意给定一张网格图,每个格子有两个权重,\((a,c)\),我们希望找出一个不包含\(c=-1\)的联通块并且\(a\)的中位数最大,同时还要包含\(k\)种颜色。题解套路题都是nb题。首先\(k\)比较小,我们可以考虑一个类似斯坦纳树的\(dp\)。\(f_{i,j,S}\)表......
  • 使用Hot Chocolate和.NET 6构建GraphQL应用 —— 创建Attribute中间件
    需求在部分接口添加一个机器人校验的功能思路读者们可以看下使用HotChocolate和.NET6构建GraphQL应用(5)——实现Query过滤功能,我们可以自定义创建一个类似的特性中间件来对接口进行管理.添加了该特性的接口即可实现机器人校验功能.实现输入对象///用户输入public......
  • ecs的使用
    前言:最近在学习esc服务器的使用以及网站的建立,特此记录1.1ECS服务器的组成ECS服务器由实例(vcpu内存)块存储(磁盘)网络等物理组件和镜像快照安全组等功能组件组成1.2LAMP环境的部署搭建网站需要LAMP或者LNMP环境,这里简单介绍LAMP环境的建立,由于启动ecs服务器时已经......