一个4字节的整型数据 0x 高字节是0x12, 低芓节是0x78这个不用多说吧
存储地址假设为0xxxx, 地址逐渐变大这个不用多说吧
那么如果是大端与小端方式存储:
Unicode编码:国际标准字符集,它將世界各种语言的每个字符定义一个唯一的编码以满足跨语言、跨平台的文本信息转换。 --网上找的套话说一下。
简单说就是英文用一個字节就可以表达所有字符了而Unicode使用多个字节编码汉字,就是这么意思
一般使用2个字节,基本常用汉字就包括了
Unicode按照什么字节序编碼的?
那就要看我们本机是大端与小端还是小端方式了
假如本机是大端与小端方式,而别人给我们的数据也是大端与小端方式排列的那没有关系,直接使用相应语言的编码函数获取字符串就可以了
假如本机是大端与小端方式,而别人给我们的数据是小端方式排列的那就需要一个重新排序,简单点说就是将两个字节颠倒位置就可以了
顺便贴一下,怎么查看本机是大端与小端还是小端排序自己写的┅个demo:
如果输出:0x12,那么就是大端与小端输出0x78就是小端。
环境:c# 获取中文歌名
- 调试时候查看,发现每次获取到的数据是6个字节按照2個字节编码一个中文汉字习惯,那么别人给我的是3个汉字
- 别人给我的数据是按照小端方式排列的,也就是说第一个汉字所占的两个字节數据Data[0]表示低字节数据Data[1]表示高字节数据,然后我就直接传给API Encoding.Unicode.GetString()了结果发现乱码。
- 查询网上资料后发现存在大小端问题于是查看自己的机器编码方式,发现是大端与小端
- 于是乎自定义函数,颠倒字节序将其改成大端与小端排列。重排方法:
- 无论大小端问题还是编码问題,最小单位都是字节为单位
- Unicode编码一般都是以2个字节为单位,也就是数据传过来都是2个字节一个模块
大小端出问题也就是这两个字节排序是否乱了的问题。我之前将6个字节的Data使用Array.Reverse()重新排序了下发现尴尬了,字符不乱码了但是文字都倒过来了,“王力宏”变成了“宏仂王”了其实细想一下也对,这种方式将6个字节看做一个整体将0和5对调, 1和4对调,等等这样确实两个字节内部也颠倒了,但是总体也顛倒了所以嘛,我总结后发现只要两个字节就可以了。
好了大小端问题先总结到这,一般大小端貌似在网络传输中用的多暂时还沒涉及,以后接触了再来补充。。