GB2312发码测试

编码表:https://www.toolhelper.cn/Encoding/GB2312

GB2312 编码表
GB 2312 标准由中国国家标准总局 1980 年发布,GB 即国标,共收录 6763 个汉字,其中一级汉字 3755 个,二级汉字 3008 个。

GB 2312 的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆 99.75% 的使用频率。

对于人名、古汉语等方面出现的罕用字,GB 2312 不能处理,这导致了后来 GBK 及 GB 18030 汉字字符集的出现。

GB 2312 收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的 682 个全角字符。

GB 2312 兼容 ASCII 码(0 - 127),之后对任意一个图形字符都采用两个字节表示,高位字节和低位字节都大于 127。

GB 2312 字符集分成 94 个区,每区有 94 个位,分别对应第一字节和第二字节,这种表示方式也称为区位码。

01-09 区为特殊符号
10-15 区为用户自定义符号区(未编码)
16-55 区为一级汉字,按拼音排序,共 3755 个
56-87 区为二级汉字,按部首/笔画排序,共 3008 个
88-94 区为用户自定义汉字区(未编码)
在这里插入图片描述
在这里插入图片描述

代码如下

#include <iostream>
#include <string>
using namespace std;

typedef unsigned char   UINT8;

void SendComplexString(const char *gb2312)
{
	UINT8 p[128] = { 0 };
	char *c;
	UINT8 len = 0, size = 0, i = 0;
	UINT8 temp = 0xff;
	while (1)
	{
		if (gb2312[i] != '\0')
		{
			i++;
		}
		else
		{
			len = i;
			break;
		}
	}
	// 统计结果,中国ab  的字符数为6
	//printf("------------%d\n", len);
	c = (char *)gb2312;
	//printf("gb2312+++++++++++%s\n", gb2312);
	//printf("c+++++++++++%s\n", c);
	//p = SendData;
	//printf("p+++++++++++%s\n", p);
	//printf("!------------%x\n", '!');
	//printf("0------------%x\n", '\0');
	//printf("------------%x\n", ' ');
	//printf("0------------%x\n", '0');
	for (i = 0; i < len;)
	{
		temp = *c % 0xff; // temp = *c & 0xff;
		//printf("temp------------%x\n", temp);
		//printf("c------------%x\n", *c);
		//if (*c == '\0')
		if (temp == '\0')
		{
			//printf("000000000000\n");
			break;
		}
		//else if (*c < ' ')
		else if (temp < ' ')
		{
			i += 1;
			c += 1;
			//printf("1111111111111\n");
		}
		//else if (*c >= ' ' && *c <= 127)
		else if (temp >= ' ' && temp <= 127)
		{
			//printf("22222222222222\n");
			p[size] = 0xa3;
			p[size + 1] = temp - ' ' + 0xa0;
			i += 1;
			c += 1;
			size += 2;
		}
		else
		{
			//printf("33333333333333\n");
			p[size] = temp;
			i += 1;
			c += 1;
			size += 1;
		}
	}
	//printf("size------------%d\n", size);
	// 发码
	for (i = 0; i < size; i++)
	{
		printf("------------%x\n", p[i]);
	}
	printf("p+++++++++++%s\n", p);
}

int main() {
	cout << "0 ";
	cout << endl;
	SendComplexString("中国ab12!@#$%^&*()_+-=`,./;'\[]<>?:|{},。、;‘【】《》?:“中国");
	cout << "1 ";
	cout << endl;
	return 0;
}

结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值