为了账号安全,请及时绑定邮箱和手机立即绑定

字节与编码

标签:
Java

前言

最开始接触编程的时候,接触的C语言,我觉得这个先后顺序很重要,一上来如果让我学Java我可能对字节和地址会毫无概念,所以我强烈建议,想学编程,想学算法,建议从C学起。在C语言里,非常自由的是变量的类型,0和NULL,0和false,都可以做比较。
你或许已经学习了字符或字符串,知道了编程语言的变量类型、循环条件、函数定义和包、类的引用,但是对电脑来说,除了0和1,它什么都看不到,或许未来有人可以找到三态或更高状态转换的方式,来提高运算速度吧。

字节

字节是一个数字信息单元,最常见的有8个位代表一个二进制数。从计算机的发展史看,字节是用于计算机中编码单个文本字符的位数,因此它是许多计算机体系结构中最小的可寻址存储单元。
我相信你你一定看到过某某面试被问,一个int多少字节?这个问题,或者是,一个int多少位?其实在字节的大小历史上一直与硬件有关,并且没有确定大小的确定标准。现代计算机的操作系统通常使用32位或64位架构,也就是由4或8位构成。那么,一个int 在32位和64位系统上都是4字节,而

1字节(Byte) = 8位(bit)

这样你应该就能理解了吧?
现在假设你有一个txt里面有很多文字,想用程序读取它读到了这些内容之后,以正常的字符显示出来,中文的显示中文,英文的显示英文,数字显示数字,这个时候就需要理解一个中文占几个字节,一个英文占几个字节,如何判断中文或英文呢?请往下看

编码

ASCII
abbreviated from American Standard Code for Information Interchange
美国标准信息交换码
是一种字符编码用于电子通信标准,ASCII代码表示计算机,电信设备和其他设备中的文本。大多数现代字符编码方案都基于ASCII。
我们通常数数的时候都是10进制的,满10进位,于是我可以说,A不是A,是65,B不是B,是66.看下图:
在这里插入图片描述
由于ASCII定义了128个字符,在现代社会如此众多的语言中用这些字符来表示已然不够使用,于是有了新的编码:Unicode。
Unicode
Unicode是ASCII的超集,数字0-128在ASCII中的含义与在Unicode中的含义相同。Unicode为每一个字符提供了唯一的编码,因此如果使用Unicode,则不会出现编码对应混乱或者不兼容的问题。
在Visual Studio 2010往上都开始默认使用Unicode编码,下面一段代码就是读取文件然后使用宽字节编码的代码

void RdviewFile() {
   wchar_t * TmpCurrentPathB = GetCurrentPath(L"MyResource\\");//exe所在绝对路径
   wcscat_s(TmpCurrentPathB, MAX_PATH, SELECTEDTXT);
   HANDLE MFILE = CreateFile(TmpCurrentPathB, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);//windowsAPT获取文件句柄
   int Msize = GetFileSize(MFILE, 0);//获取文件大小
   if (Msize > 0) {
   	char *Mtxt = new char[Msize + 1];//为缓冲区申请内存
   	DWORD Mbyte;//out读取文件的实际大小
   	ReadFile(MFILE, Mtxt, Msize, &Mbyte, 0);//读取文件保存到缓冲区
   	Mtxt[Msize] = 0;//为结尾赋零
   	int unicodelen = MultiByteToWideChar(CP_ACP, 0, Mtxt, -1, 0, 0);
   	wchar_t * pUnicode;//定义U码指针
   	pUnicode = new wchar_t[unicodelen];//申请U码缓冲区
   	MultiByteToWideChar(CP_ACP, 0, Mtxt, -1, pUnicode, unicodelen);//ANSI转换宽字节
   	TxtInfo.TXTCONTENT = pUnicode;
   	TxtInfo.TXTSIZE = unicodelen;//字符数
   }
   else {
   	TxtInfo.TXTCONTENT = 0;
   	TxtInfo.TXTSIZE = 0;
   }
   CloseHandle(MFILE);
   return;
}

如果需要完整的项目代码可以参考我写的代码 屋顶打字通

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消