一、  编码

同一个字符在不同的编码下会被编成不同长度的编码,比如:

ACSII,每个字符对应一个字节,实际上只使用了7位,从00h-7Fh。只能表达128个字符。

GB2312,中文的一种编码,每个字符使用两个字节表示。

UTF-8, 可以表达所有unicode字符,每个字符可以用1-3个字节表示。

UTF-16, 可以表达所有unicode字符,每个字符可以用1-2个16位整数表示。

UTF-32, 可以表达所有unicode字符,每个字符可以用1个32位整数表示。

目前Windows的内核已经采用Unicode编码,这样在内核上可以支持全世界所有的语言文字。但是由于现有的大量程序和文档都采用了某种特定语言的编码,例如gb2312,Windows不可能不支持现有的编码,而全部改用Unicode。

Windows使用上面表格所示的代码页(code page)来适应各个国家和地区。Windows使用默认代码页来表示当前操作系统的使用的语言,这可以在控制面板的“区域和语言选项”中选择。一般中文windows操作系统,选择“中文(中国)”,这样设置,windows的默认代码页就是936,即gb2312。

Windows按照当前的缺省代码页去解释文本文件里的字节流。缺省代码页可以通过控制面板的区域选项设置。记事本的另存为中有一项ANSI,其实就是按照缺省代码页的编码方法保存。

Windows的内码是Unicode,它在技术上可以同时支持多个代码页。只要文件能说明自己使用什么编码,用户又安装了对应的代码页,Windows就能正确显示,例如在HTML文件中就可以指定charset。

字节序

UTF-8是单字节的编码,不用考虑字节顺序,但是UTF-16和UTF-32是16位和32位的编码,每个编码内部都有个字节顺序的问题。比如字符”A” (U+0041),在序列化时是”00”在前还是”41”在前,这就有两种可能。

UTF-16 big-endian byte order: 00 41

UTF-16 little-endian byte order: 41 00

规范规定了一个可选的方案,就是在编码前导几个字符放上本身不是UTF可能编码的前导编码来帮助判断识别。

UTF-8: EF BB BF

UTF-16 big-endian byte order: FE FF

UTF-16 little-endian byte order: FF FE

UTF-32 big-endian byte order: 00 00 FE FF

UTF-32 little-endian byte order: FF FE 00 00

二、  需要把string转换为byte[]使用的场景

任何需要把string序列化处理都需要这种转换,比如:

需要把string保存到文件中,必须把string转换成一个有序的字节流,以便系统在硬盘上做物理保存。

对string做加密操作时,加密算法是针对字节进行处理,这时也需要把string转换成字节流以便加密算法对数据进行处理。

String到字节流的转换涉及到使用何种编码,使用不同的编码得到的字节码不同,再从字节码做反操作恢复成string,必须使用编码时使用的编码或者兼容的编码,否则结果就是乱码。

字节与字符串,十六制字符串相关推荐

  1. 字符串转16进制字节数组,字节数组转16进制字符串

    /// <summary>/// 字符串转16进制字节数组/// </summary>/// <param name="hexString">& ...

  2. JavaScript学习(六十六)—字符串对象常用的属性和方法总结以及数组元素的排序问题

    JavaScript学习(六十六)-字符串对象常用的属性和方法总结以及数组元素的排序问题 学习内容 一.数组去重问题 二.二维数组的定义 三.二维数组的元素操作 四.二维数组的遍历 五.关联数组 六. ...

  3. C++实现字节数组与16进制字符串互转,字符串转16进制字符串

    1 无符号字节数组转16进制字符串 std::string bytesToHexString(const BYTE* bytes,const int length) {if (bytes == NUL ...

  4. java integer转成负数_Java 十进制和十六制之间的转化(负数的处理)

    在一些情况下,我们需要将数字在十进制和十六制下互相转化. 在Java中将十进制转化成十六进制非常的简单. int var = 324; String hex = Integer.toHexString ...

  5. 加解密后字节数组和(16进制)字符串的相互转换问题

    前面几篇博客简单归纳了Android中有涉及到的编码和加解密相关的问题,在这里想再补充下加密解密过程中遇到的字节数组和字符串的转换问题.前面博客中包含了转换的代码,由于这个属于所有加解密共性的问题,所 ...

  6. 16进制字符串转成字节数组、字节数组转16进制字符串、16进制字符串转成2进制字符串、中英文 字符串转16进制、16进制转换成中英文 字符串

    因为需要与硬件相互通讯 用到了这些方法 亲测可用 /*** 16进制表示的字符串 转换为字节数组** @param hexString 16进制表示的字符串* @return byte[] 字节数组* ...

  7. java 字节 16进制_Java字节数组和16进制字符串的互相转化

    背景基础知识: 1.1. "字符"是由数字来表示的 先来重新了解一下计算机是如何处理"字符"的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不 ...

  8. c语言蓝桥十进制转十六进制,蓝桥杯:基础练习 十进制转十六制

    基础练习 十进制转十六进制 时间限制:1.0s   内存限制:512.0MB 问题描述 十六进制数是在程序设计时经常要使用到的一种整数的表示方式.它有0,1,2,3,4,5,6,7,8,9,A,B,C ...

  9. 加密解密基础问题:字节数组和(16进制)字符串的相互转换

    在加密时,一般加密算法和hash算法,它们操作的都是字节数组,对字节数组按照加密算法进行各种变换,运算,得到的结果也是字节数组.而我们一般是要求对字符串进行加密,所以就涉及到字符串String到 by ...

最新文章

  1. 特斯拉“刹车失灵”不绝于耳网络营销外包怎样看特斯拉进驻中国?
  2. python十八:尾调用与递归
  3. python3 出现错误:TypeError: must be str, not list
  4. 如何保证 Redis 消息队列中的数据不丢失?
  5. linux 发文件被过滤的内容,linux文件过滤以及内容编辑处理
  6. Editplus中添加System.out.println()快捷键
  7. c语言随机函数怎么循环,如何在C ++循环中生成不同的随机数?
  8. visio 科学图形包_【数据科学的python系列3】Python数据科学环境设置
  9. LayaAir UI组件 # List 列表、ProgressBar 进度条
  10. class文件不能反编译
  11. 电子护照阅读器|机场海关边检酒店必备
  12. android手机是vivo吗,为什么最流畅的安卓手机竟然是VIVO和OPPO?
  13. 电脑主要硬件各种作用
  14. 博客园使用markdown发布博客
  15. zip压缩文件转换为可传输byte[]流和不解压下读取指定zip包中文件
  16. 截图神器推荐 ShareX
  17. adlds文件服务器,WinServer2008之ADLDS轻型目录服务解析
  18. 读写锁ReentrantReadWriteLock源码分析
  19. < Linux >:Linux 进程概念 (1)
  20. 股票交易软件的python编程_GitHub - yutuer/stock-1: stock,股票系统。使用python进行开发。...

热门文章

  1. 【操作系统】-- PV原语(哲学家进餐问题)
  2. MayaDay7模型模块:晶格调整弯曲
  3. Sitemap在线生成器,网站地图在线生成工具
  4. 技嘉主板关机了鼠标键盘灯还亮着?
  5. Artistic Style详解
  6. IDEA LeetCode力扣刷题插件 中文类名 模板
  7. STM32Cubemx——ADC采集+DMA传输
  8. 21土拨鼠FRW世界第一碳纤维自行车品牌进藏山地车十大排行榜
  9. 在计算机刚卸载的东西能恢复吗,怎样恢复刚刚删除的文件?
  10. SQL实现FIFO算法:库龄继承、配额分析