字符编码 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加密算法 ...
随机推荐
- KingbaseES V8R6 锁等待检测
背景 对于多数数据库,dba技能之一就是查找锁.锁的存在有效合理的在多并发场景下保证业务有序进行.下面我们看一下KingbaseESV8R6中查找阻塞的方法. 1.找到"被阻塞者" ...
- Lua CallbackHell优化
概述 在异步操作中,常常要使用回调.但是,回调的嵌套常常会导致逻辑混乱,一步错步步错,难以维护.在Lua中,可以使用协程进行优化. 问题分析 模拟一个回合制游戏攻击过程 local function ...
- 2、String类
String类 String 对象用于保存字符串,也就是一组字符序列 字符串常量对象是用双引号括起来的字符序列,例如:"你好"."12.07"."bo ...
- Rust基本数据类型
基本类型 Rust 每个值都有其确切的数据类型,总的来说可以分为两类:基本类型和复合类型. 基本类型意味着它们往往是一个最小化原子类型,无法解构为其它类型(一般意义上来说),由以下组成: 数值类型: ...
- Redis基本数据结构ZipList
为什么要有ziplist 有两点原因: 普通的双向链表,会有两个指针,在存储数据很小的情况下,我们存储的实际数据的大小可能还没有指针占用的内存大,是不是有点得不偿失?而且Redis是基于内存的,而且是 ...
- Elasticsearch:用户安全设置
Elastic Stack的组件是不安全的,因为它没有内置的固有安全性. 这意味着任何人都可以访问它. 在生产环境中运行Elastic Stack时,这会带来安全风险. 为了防止生产中未经授权的访问, ...
- nginx配置文件内容详解
events { # 服务器最大链接数 worker_connections 1024; # 设置一个进程是否同时接受多个网络连接,默认为off multi_accept on; #事件驱动模型,se ...
- secureCRT登录ubuntu 报错:`No compatible key-exchange method. The server supports these methods: diffie-hellman`
在VMware虚拟机中安装好ubuntu 20.04,已安装并启动sshd,但是使用secureCRT远程登录时则报错: Key exchange failed. No compatible key- ...
- C#-5 类和继承
一 类继承 继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一.继承呈现了面向对象程序设计的层次结构. 通过继承,我们能以一个已经存在的类为基础来定义一个新类.已存在的类称为基类或父类 ...
- 浅谈 Golang 插件机制
我们知道类似 Java 等半编译半解释型语言编译生成的都是类似中间态的字节码,所以在 Java 里面我们想要实现程序工作的动态扩展,可以通过 Java 的字节码编辑技术([[动态代理#ASM]]/[[ ...