前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >加密与安全_ 理解字节与比特

加密与安全_ 理解字节与比特

作者头像
小小工匠
发布2024-05-26 13:22:03
1030
发布2024-05-26 13:22:03
举报
文章被收录于专栏:小工匠聊架构

概述

Byte(字节)是计算机中数据存储的基本单位,通常用于衡量存储容量,比如移动硬盘的容量可以是1TB。

一个字节由8个比特(bit)组成。比特是最小的数据单位,它可以是0或1,用于表示二进制信息。

数据传输时通常以比特为单位进行计量,比如家里的宽带速度可能是以兆比特(Mbps)或千兆比特(Gbps)为单位。当我们说家里的宽带是100Mbps时,意味着每秒可以传输100兆比特的数据。

要将比特转换为字节,可以使用以下关系:1字节 = 8比特。因此,如果要将100Mbps转换为字节,需要将其除以8。

比特(Bit):

  • 比特是信息的最小单位,代表一个二进制数字,可以是0或1。
  • 它是数字数据存储和传输的基础,所有的信息都是由比特组成的。
  • 比特通常用于描述计算机中的单个开关或存储单元的状态。

字节(Byte):

  • 字节是由8个比特组成的集合,通常表示为8位二进制数,即2^8 = 256个可能的组合。
  • 字节是计算机中最常用的数据单位,用于表示文本字符、数字和其他数据。
  • 一个字节可以存储一个ASCII字符,其中ASCII(美国标准信息交换码)是一种将英文字符、数字和其他符号编码为二进制数的标准。

在实际应用中,比特和字节的关系可以这样理解:字节是比特的集合,而比特是构成字节的单个砖块。计算机处理数据时,通常以字节为单位进行读写和传输,但底层的数据传输和存储则是由单个比特组成的。

Code

获取字符串byte

代码语言:javascript
复制
  public static void main(String[] args) {
        String a = "a";
        byte[] bytes = a.getBytes();
        for (byte b : bytes) {
            // 打印发现byte实际上就是ascii码
            System.out.println(b);
        }
    }

byte转化为bit

代码语言:javascript
复制
public class ByteBit {
    public static void main(String[] args) {
        // 定义一个字符串变量a
        String a = "a";
        // 将字符串a转换为字节数组
        byte[] bytes = a.getBytes();
        // 遍历字节数组中的每个字节
        for (byte aByte : bytes) {
            // 将字节转换为整数值
            int c = aByte;
            // 打印出整数值
            System.out.println(c);
            // 将整数值转换为二进制字符串表示
            String s = Integer.toBinaryString(c);
            // 打印出二进制字符串表示
            System.out.println(s);
        }
    }
}

将字符串"a"转换为字节数组,并将每个字节对应的整数值和二进制表示打印出来

1100001 打印出来应该是8个bit,但前面是0,没有打印 ,从打印结果可以看出来,一个英文字符 ,占一个字节

中文对应的字节(UTF-8编码)–> 一个中文对应的是三个字节

这段代码演示了根据不同的编码格式(UTF-8和GBK)将字符串转换为字节数组,并打印出每个字节的整数值和二进制表示。

代码语言:javascript
复制
/**
 * 根据编码的格式不一样,对应的字节也不一样
 * 
 * 如果是UTF-8:一个中文对应的是三个字节
 * 如果是GBK : 一个中文对应的是二个字节
 * <p>
 * 如果是英文,就无所谓编码格式
 */
public static void main(String[] args) throws Exception {
    // 定义一个字符串变量a,包含一个中文字符
    String a = "小";
    // 根据UTF-8编码格式将字符串转换为字节数组
    //byte[] bytes = a.getBytes();
    
    // 根据GBK编码格式将字符串转换为字节数组
    //byte[] bytes = a.getBytes("GBK");
    
    // 根据UTF-8编码格式将字符串转换为字节数组
    byte[] bytes = a.getBytes("UTF-8");

    // 遍历字节数组中的每个字节
    for (byte aByte : bytes) {
        // 打印出每个字节的整数值
        System.out.println(aByte);
        // 将每个字节的整数值转换为二进制字符串表示,并打印出来
        String s = Integer.toBinaryString(aByte);
        System.out.println(s);
    }
}

根据不同的编码格式,一个中文字符所占的字节数也不同,UTF-8编码下一个中文字符通常占三个字节,而GBK编码下通常占两个字节。

中文对应的字节(GBK编码)–> 一个中文对应的是两个字节

代码语言:javascript
复制
byte[] bytes = a.getBytes("GBK");

英文对应的字节 - 跟编码无关

代码语言:javascript
复制
  public static void main(String[] args) throws Exception {
        String a = "a";
        byte[] bytes = a.getBytes();
        for (byte aByte : bytes) {
            System.out.println(aByte);
            String s = Integer.toBinaryString(aByte);
            System.out.println(s);
        }
    }

小结

根据编码格式的不同,字符所占的字节数也不同,这是因为不同的编码方式使用不同的规则来表示字符。这里提到了两种常见的字符编码格式:UTF-8和GBK。

  • UTF-8:UTF-8是一种变长字符编码,通常用来表示Unicode字符集中的字符。在UTF-8编码下,一个中文字符通常由三个字节表示,而一个英文字符则由一个字节表示。因为UTF-8采用了变长编码,所以不同的字符可能占据不同数量的字节,从而能够灵活地表示各种语言的字符。
  • GBK:GBK是一种针对汉字的多字节编码,它主要用于中文字符的表示。在GBK编码下,一个中文字符通常由两个字节表示,而一个英文字符则仍然由一个字节表示。与UTF-8不同,GBK编码是固定长度的,每个字符所占的字节数都是相同的。

对于英文字符,由于其在各种编码格式下都是用相同的规则表示,因此无论使用何种编码格式,英文字符都只占一个字节。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • Code
    • 获取字符串byte
      • byte转化为bit
        • 中文对应的字节(UTF-8编码)–> 一个中文对应的是三个字节
          • 中文对应的字节(GBK编码)–> 一个中文对应的是两个字节
            • 英文对应的字节 - 跟编码无关
            • 小结
            相关产品与服务
            数据保险箱
            数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档