字符编码 XUTF
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
* Description: 上机编程认证
* Note: 缺省代码仅供参考,可自行决定使用、修改或删除
* 只能import Go标准库
*/
package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
"strings"
)
func getDecimalByteLength(decimalLens int) int {
if decimalLens < 0 {
return -1
}
if decimalLens >= 0 && decimalLens < 8 {
return 1
}
if decimalLens >= 8 && decimalLens < 12 {
return 2
}
if decimalLens >= 12 && decimalLens < 17 {
return 3
}
if decimalLens >= 17 && decimalLens < 22 {
return 4
}
if decimalLens >= 22 && decimalLens < 27 {
return 5
}
if decimalLens >= 27 && decimalLens < 32 {
return 6
}
return -1
}
// 待实现函数,在此函数中填入答题代码
func utfEncoding(unicodeVal string) string {
// 转为 二进制判断个数
unicodeIntVal,_ := strconv.ParseInt(unicodeVal, 10, 64)
decimalVal := fmt.Sprintf("%b", unicodeIntVal)
decimalLens := len(decimalVal)
decimalByteLens := getDecimalByteLength(decimalLens)
unicodeBytesVal := ""
if decimalByteLens == 1 {
needLens := 8 - decimalByteLens
needZeroLens := needLens - decimalLens
unicodeBytesVal = "1"
for i:= 0; i < needZeroLens; i++ {
unicodeBytesVal += "0"
}
unicodeBytesVal += decimalVal
} else {
unicodeCount := 0
for i := 0; i < decimalByteLens; i++ {
unicodeBytesVal += "0"
}
unicodeBytesVal += "1"
needHeaderLens := 8 - decimalByteLens - 1
actualHeaderLens := decimalLens - (decimalByteLens-1)*6
needZeroLens := needHeaderLens - actualHeaderLens
for i:= 0; i < needZeroLens; i++ {
unicodeBytesVal += "0"
}
for i:= 0; i < actualHeaderLens; i++ {
unicodeBytesVal += string(decimalVal[i])
}
for i:= actualHeaderLens; i < decimalLens; i++ {
if unicodeCount % 6 == 0 {
unicodeBytesVal += "01"
unicodeCount = 0
}
unicodeBytesVal += string(decimalVal[i])
unicodeCount ++
}
}
//转为16进制
unicodeDecVal,_ := strconv.ParseInt(unicodeBytesVal, 2, 64)
unicodeHexVal := strconv.FormatInt(unicodeDecVal, 16)
// 判断奇偶
if len(unicodeHexVal) % 2 != 0 {
unicodeHexVal = "0" + unicodeHexVal
}
// 转大写
unicodeHexVal = strings.ToUpper(unicodeHexVal)
fmt.Println(unicodeHexVal)
return unicodeHexVal
}
func main() {
inputReader := bufio.NewReader(os.Stdin)
unicodeVal, err := inputReader.ReadString('\n')
if err != nil && err != io.EOF {
fmt.Println(err.Error())
return
}
unicodeVal = strings.TrimRight(unicodeVal, "\r\n")
unicodeVal = strings.TrimSpace(unicodeVal)
fmt.Println(utfEncoding(unicodeVal))
}
字符编码 XUTF的更多相关文章
- Python遇到字符编码出问题的一个相对万能的办法
在使用Python做爬虫的过程中,经常遇到字符编码出问题的情况. UnicodeEncodeError: 'ascii' codec can't encode character u'\u6211' ...
- python学习笔记(基础一:'hello world'、变量、字符编码)
第一个python程序: Hello World程序 windows命令行中输入:python,进入python交互器,也可以称为解释器. print("Hello World!" ...
- Python学习Day2笔记(字符编码和函数)
1.字符编码 #ASCII码里只能存英文和特殊字符 不能存中文 存英文占1个字节 8位#中文编码为GBK 操作系统编码也为GBK#为了统一存储中文和英文和其他语言文字出现了万国码Unicode 所有一 ...
- mysql 5.5 修改字符编码
修改/etc/mysql/my.cnf 配置文件: 最后重启mysql 服务,再查看: 编码已经改好了,可以支持中文字符编码了.
- mysql命令行修改字符编码
1.修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2.创建数据库时,指定数据库的字符编码 mysql> create ...
- 关于Unicode,字符集,字符编码,每个程序员都应该知道的事
关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...
- java中文乱码解决之道(二)-----字符编码详解:基础知识 + ASCII + GB**
在上篇博文(java中文乱码解决之道(一)-----认识字符集)中,LZ简单介绍了主流的字符编码,对各种编码都是点到为止,以下LZ将详细阐述字符集.字符编码等基础知识和ASCII.GB的详情. 一.基 ...
- ASP.NET 字符编码的那些事
ASP.NET 中的字符编码问题,一般会有两个场景: HTML 编码:一般是动态显示 HTML 字符或标签,写法是:HttpUtility.HtmlDecode(htmlString) 或 Html. ...
- 【字符编码】Java字符编码详细解答及问题探讨
一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 ...
- 【字符编码】字符编码 && Base64编码算法
一.前言 在前面的解决乱码的一文中,只找到了解决办法,但是没有为什么,说白了,就是对编码还是不是太熟悉,编码问题是一个很简单的问题,计算机从业人员应该也必须弄清楚,基于编码的应用有Base64加密算法 ...
随机推荐
- Python 爬取网站数据
一.使用request库实现批量下载HTML 二.使用BeautifulSoup库实现html解析 官网:https://beautifulsoup.readthedocs.io/zh_CN/v4.4 ...
- RTSP播放器开发填坑之道
好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTSP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延 ...
- Android、iOS平台RTMP/RTSP播放器实时音量调节
介绍移动端RTMP.RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对 ...
- 通过Quartz 进行定时任务
小记一下通过Quartz 进行轮询数据库从而进行自动打印的需求. 一:首先通过NuGet引用Quartz,Quartz依赖Common.Logging和Common.Logging.Log4Net12 ...
- KingbaseES R6 集群repmgr witness 手工配置案例
使用见证服务器: 见证服务器是一个正常的KingbaseES实例,不是流复制群集的一部分; 其目的是,如果发生故障转移情况,则提供证明它是主服务器本身不可用的证据,而不是例如在不同物理位置之间的网络分 ...
- 【读书笔记】C#高级编程 第二章 核心C#
(一)第一个C#程序 创建一个控制台应用程序,然后输入代码,输入完毕后点击F5 Console.WriteLine();这条语句的意思:把括号内的内容输出到界面上: Console.ReadKey() ...
- [Python]-字典-实践经验总结
字典是Python中常用的一个数据类型. 与列表有相似的用法,表现在列表的下标和字典的键值可以通过相似的方式读取数据: list_name[0] = value dict_name['key'] = ...
- Redux(mvc、flux、react-redux)
其他章节请看: react实战 系列 Redux 关于状态管理,在 Vue 中我们已经使用过 Vuex,在 spug 项目中我们使用了 mobx,接下来我们学习 Redux. 本篇以较为易懂的方式讲解 ...
- 彻底掌握Makefile(一)
彻底掌握Makefile(一) 介绍 makefile就是一个可以被make命令解析的文件,他定义了一系列编译的规则,帮助我们更加方便.简洁的去完成编译的过程.在一个大工程当中我们会有各种各样的文件, ...
- 单台主机MySQL多实例部署
二进制安装mysql-5.7.26 [root@mysql ~]# cd /server/tools/ [root@mysql tools]# ll total 629756 -rw-r--r-- 1 ...