C#中汉字转区位码

目录

一、关于区位码 

1.区位码定义

2.算法

二、实例

三、生成效果

四、程序中的知识点

1.byte[] GetBytes(string s)

2.字节数组转short类型


一、关于区位码 

1.区位码定义

        区位码是一个4位的十进制数,每个区位码都对应着一个唯一的汉字,区位码的前两位叫做区码,后两位叫做位码。

2.算法

        首先通过Encoding对象的GetBytes方法得到汉字的字节数组,将字节数组的第一位和第二位分别转换为整型数值,然后将得到的两个整型数值分别减160后转换为字符串,连接两个字符串就组成了汉字区位码。

string P_Chinese ="科";
byte[] P_bt_array =Encoding.Default.GetBytes(Chinese);
short front =(short)(P_bt_array[0]-’\0’); //将字节数组的第一位转换成short类型
short back =(short)(P_bt_array[1]-’\0’);  //将字节数组的第二位转换成short类型
string P_Result =(front -160).ToString()+(back-160).ToString();

        Encoding对象的GetBytes方法提供了多个重载,可以接收字符串、字符数组等对象。

可以使用FileStream对象将字节数组写入文件。

        使用Encoding对象的GetBytes方法可以得到字符串对象的字节数组,现在可以创建一个FileStream对象,方便地将字节数组写入文件中。同样地,可以从文件中读取字节数组,然后调用Encoding对象的GetString方法将字符数组转换为字符串。

二、实例

//汉字与区位码的转换
using System.Text;namespace _037
{public partial class Form1 : Form{private GroupBox? groupBox1;private TextBox? textBox2;private Button? button1;private TextBox? textBox1;private Label? label1;public Form1(){InitializeComponent();Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // textBox2// textBox2 = new TextBox{Location = new Point(102, 57),Name = "textBox2",Size = new Size(100, 23),TabIndex = 3};// // button1// button1 = new Button{Location = new Point(21, 57),Name = "button1",Size = new Size(75, 23),TabIndex = 2,Text = "转区位码",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // textBox1//             textBox1 = new TextBox{Location = new Point(102, 28),Name = "textBox1",Size = new Size(100, 23),TabIndex = 1};// // label1// label1 = new Label{AutoSize = true,Location = new Point(21, 34),Name = "label1",Size = new Size(68, 17),TabIndex = 0,Text = "输入汉字:"};// // groupBox1// groupBox1 = new GroupBox{Location = new Point(12, 12),Name = "groupBox1",Size = new Size(220, 102),TabIndex = 0,TabStop = false,Text = "汉字转区位码"};groupBox1.SuspendLayout();groupBox1.Controls.Add(textBox2);groupBox1.Controls.Add(button1);groupBox1.Controls.Add(textBox1);groupBox1.Controls.Add(label1);// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(244, 126);Controls.Add(groupBox1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "汉字转区位码";          groupBox1.ResumeLayout(false);groupBox1.PerformLayout();}private void Button1_Click(object? sender, EventArgs e){if (textBox1!.Text != string.Empty) //判断输入是否为空{try{textBox2!.Text =            //得到汉字区位码信息GetCode(textBox1.Text);}catch (IndexOutOfRangeException ex){MessageBox.Show(            //使用消息对话框提示异常信息ex.Message + "请输入正确的汉字", "出错!");}}else{MessageBox.Show("请输入正确的汉字", "提醒!");}}/// <summary>/// 得到汉字区位码方法/// </summary>/// <param name="strChinese">汉字字符</param>/// <returns>返回汉字区位码</returns>public static string GetCode(string Chinese){byte[] byte_array = Encoding.Default.GetBytes(Chinese); //字符串转Byte数组int front = (short)(byte_array[0] - '\0');              //将字节数组的第一位转换成short类型int back = (short)(byte_array[1] - '\0');               //将字节数组的第二位转换成short类型return (front - 160).ToString() + (back - 160).ToString();//计算并返回区位码}}
}

三、生成效果

 

四、程序中的知识点

1.byte[] GetBytes(string s)

         用途:字符串转Byte数组

 public virtual byte[] GetBytes(string s){if (s == null){throw new ArgumentNullException("s", Environment.GetResourceString("ArgumentNull_String"));}int byteCount = GetByteCount(s);byte[] array = new byte[byteCount];int bytes = GetBytes(s, 0, s.Length, array, 0);return array;}
//使用UTF-8的字符集,将字符串转换为字节数组
byte[]utf8 =Encoding.UTF8.GetBytes(str);

2.字节数组转short类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/316842.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Find My查找大升级,苹果Find My可添加物品翻倍

Apple「查找」Find My可通过庞大的“Apple Find My Network” 实现全球查找功能。无数iOS、iPadOS、macOS、watchOS激活设备与Find My 设备结合在一起&#xff0c;无需连接到Wi-Fi或者蜂窝网络&#xff0c;用户也可以给遗失的设备定位。对于任何iOS、iPadOS、macOS、watchOS设备…

粒子群优化pso结合bp神经网络优化对csv文件预测matlab(3)

1.csv数据为密西西比数据集&#xff0c;获取数据集可以管我要&#xff0c;数据集内容形式如下图&#xff1a; 2.代码 这里参考的是b站的一位博主。 数据集导入教程在我的另一篇文章bp写过&#xff0c;需要的话可以去看一下 psobp.m close all clc%读取数据 inputX; outputY;…

windows下使用makefile编译c++程序

安装make https://www.mingw-w64.org/downloads/ 安装w64devkit版本&#xff0c;能使用一些类linux的命令如rm等 下载完成后解压压缩包&#xff0c;将bin目录添加到系统环境变量的PATH中 在cmd中验证使用make --version是否安装成功

多生产者-多消费者问题-第三十一天

目录 多生产者-多消费者问题 可不可以不使用互斥信号量&#xff1f; 当缓冲区的大小为2呢&#xff1f; 结论 多生产者-多消费者问题 多个不同类别的消费者和生产者&#xff0c;他们生产的和要消费的产品使不一样的 1、分析关系&#xff1a;找出题目中描述的各个进程&…

[足式机器人]Part2 Dr. CAN学习笔记-动态系统建模与分析 Ch02-1+2课程介绍+电路系统建模、基尔霍夫定律

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-动态系统建模与分析 Ch02-12课程介绍电路系统建模、基尔霍夫定律 1. 课程介绍2. 电路系统建模、基尔霍夫定律 1. 课程介绍 2. 电路系统建模、基尔霍夫定律 基本元件&#xff1a; 电量 库伦&…

粘接PI膜除了使用PI膜专用UV胶粘接,还可以使用热固化环氧胶来解决!

热固化环氧胶也是粘接聚酰亚胺&#xff08;PI&#xff09;膜的一种常见方法。 热固化环氧胶是一种在加热的条件下固化成坚固状态的胶水&#xff0c;在涂抹或涂覆胶水后&#xff0c;通过加热&#xff0c;胶水中的化学反应被触发&#xff0c;导致其硬化和固化&#xff0c;从而形…

【linux kernel】linux的SPI框架分析

文章目录 一、linux内核中的SPI框架二、SPI核心的初始化三、SPI核心的数据结构1、struct spi_statistics2、struct spi_delay3、struct spi_device4、struct spi_driver5、struct spi_controller6、struct spi_res7、struct spi_transfer8、struct spi_message9、struct spi_bo…

【Leetcode】466. 统计重复个数

文章目录 题目思路代码 题目 466. 统计重复个数 思路 题目要求找出一个最大整数 m&#xff0c;使得经过 n2 个字符串 s2 组成的字符串能够被经过 n1 个字符串 s1 组成的字符串完全包含的次数。使用动态规划来记录每个位置匹配的情况&#xff0c;并通过循环节的分析来计算最…

kafka容灾演练的方案

背景 kafka可以通过MirrorMaker工具把集群的数据从一个集群同步到另一个集群&#xff0c;通过在另一个数据中心创建灾备集群的方式可以做到容灾的效果,但是如果我们不通过如此重量级的工具也想达到容灾演练的目的&#xff0c;可以怎么做呢 kafka简单容灾实现 当原kafka集群发…

2024最新最全【Xmind8】下载安装零基础教程【附安装包】

软件下载 软件&#xff1a;Xmind 版本&#xff1a;2023 语言&#xff1a;简体中文 大小&#xff1a;136.72M 安装环境&#xff1a;Win7及以上版本 &#xff0c;64位操作系统 硬件要求&#xff1a;CPU2.0GHz &#xff0c;内存4G&#xff08;或更高&#xff09; 下载通道①百度网…

报表生成器FastReport .Net用户指南:带图表的报告(图表编辑器)

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案&#xff0c;使用FastReport .NET可以创建独立于应用程序的.NET报表&#xff0c;同时FastReport .Net支持中文、英语等14种语言&#xff0c;可以让你的产品保证真正的国际性。 FastReport.NET官方版…

AndroidStudio导入程序、项目(教程)

目录 1. 首先解压压缩包&#xff0c;转为文件夹 2. 打开解压好的项目文件夹&#xff0c;删除.gradle和.idea这两个文件 3. 修改bulid.gradle文件&#xff0c;将gradle的版本型号改成自己的 (1) 传统结构 (2) 简洁结构 4. 打开android stdio软件&#xff0c;导入已经修改好…