`
benbenming
  • 浏览: 112184 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

关于64进制续

阅读更多

其实进行进制转换关键是要把位、字节、字符、字符串的概念弄清楚。

一个带符号的字节能表示的数值范围是-127~128,因此我们无论转换进制为2进制、8进制、16进制等等,甚至是128进制都可以考虑按位操作进行进制转换,Apache的commons-codec项目中针对16进制转换的方法代码如下:

    public static char[] encodeHex(byte[] data) {

        int l = data.length;

           char[] out = new char[l << 1];

           // two characters form the hex value.
           for (int i = 0, j = 0; i < l; i++) {
               out[j++] = DIGITS[(0xF0 & data[i]) >>> 4 ];
               out[j++] = DIGITS[ 0x0F & data[i] ];
           }

           return out;
    }

代码中将一个字节分为两个字节进行存储,这样一个字节转换为一个字符来表示,这样可以方便的转换任何数据不用考虑符号丢失。至于一个字节转换为两个字节的原则,根据需要转换的不同进制设定两个字节的分界点,如16进制的转换,在一个字节中表示16为00001111,那么低四位即为一个字节,高四位为另一个字节;同理,对于64进制,在一个字节中表示64为00111111,那么低六位为一个字节,高两位为另一个字节。

对于一个byte数组按照高低字节的分配,获取对应数值,通过此数值获取对应进制相关位置的字符,如16进制中第十个字符为a,那么如果低字节为10则对应16进制的字符为a,同理,高字节也对应转换,最终取得16进制的char数组,此数组转为String即为我们常见的16进制的字符串。

我的64进制的实现代码如下:

byte数组转换为64进制char数组

 public static char[] encode64Digit(byte[] bytes) {
  char[] out = new char[bytes.length << 1];
  for (int i = 0, j = 0; i < bytes.length; i++) {
   out[j++] = digits64[(0xC0 & bytes[i]) >>> 6];
   out[j++] = digits64[0x3F & bytes[i]];
  }
  return out;
 }

64进制char数组转换为byte数组

 public static byte[] decode64Digit(char[] chars) {
  if ((0x01 & chars.length) != 0) {
   return null;
  }
  byte[] out = new byte[chars.length >> 1];
  for (int i = 0, j = 0; j < chars.length; i++) {
   int a = (getSize(chars[j]) << 6);
   j++;
   int b = getSize(chars[j]) & 0xFF;
   a = (a | getSize(chars[j]));
   j++;
   out[i] = (byte) (a & 0xFF);
  }
  return out;
 }

分享到:
评论

相关推荐

    aria2-1.37.0-aarch64-linux-android-build1.zip

    3. **文档**:可能会有帮助文件、README 或者 CHANGES 文件,提供关于软件的使用指南、版本变更日志以及版权信息。 4. **库文件**:如果 aria2 使用了某些特定的库,这些库的二进制文件可能会被包含在内,以便在目标...

    wget windows64版本 1.20.3.zip

    这个版本的wget被编译为静态二进制文件,这意味着它不依赖任何额外的动态链接库(DLLs),可以直接在64位Windows操作系统上独立运行。 静态编译的优势在于简化了部署过程,用户只需将wget.exe复制到目标机器上,...

    wget-1.14-15.el7.x86_64.rpm

    在Linux系统中,RPM包是用于管理和控制软件的一种方式,它包含了软件的源代码编译后的二进制文件、库文件、配置文件以及必要的依赖关系。安装RPM包可以通过使用`rpm`命令来完成,例如: ```bash sudo rpm -ivh wget...

    windows下curl工具 curl-7.71.1-win64-mingw

    9. **断点续传**:如果网络中断,curl能够记住断点并从上次的位置继续下载。 10. **时间戳比较**:在下载文件前,curl会检查本地文件的时间戳,如果远程文件未更新,则避免不必要的下载。 **安装与使用:** 在...

    tftp的Windows 64环境 能正常使用

    描述中的“csdn曝光率大,那就资源反馈吧,无法设置免费就5个积分吧,测试过能正常get put 文件当然你得会基础的使用”表明这个资源可能来自于一个程序员社区,如CSDN,并且提供了关于如何在Windows环境中使用TFTP的...

    FileZilla_3.51.0_win64-setup.zip

    4. **断点续传**:如果在传输过程中中断,可以从上次中断的地方继续,避免了重新传输大文件。 5. **传输队列**:可以设置文件传输的优先级和顺序,有效管理并发任务。 6. **传输速率限制**:允许用户自定义上传和...

    华硕AC1200HP改版固件适用于斐讯K1和K2RT-AC1200HP_MT7620_8M_64M 没打印

    在压缩包内的“华硕AC1200HP改版固件适用于斐讯K1和K2RT-AC1200HP_MT7620_8M_64M.trx”文件,是改版固件的实际二进制文件,用户可以通过路由器的管理界面进行升级。而“新建文本文档.txt”可能包含了升级步骤、注意...

    ffmpeg-20190428-45048ec-win64-static.zip

    "bin"目录下的静态编译二进制文件是FFmpeg的核心,可以直接在Windows 64位系统上运行,无需额外安装其他依赖库。这些文件包括主程序`ffmpeg.exe`和其他辅助工具,如`ffplay.exe`(用于播放视频)和`ffprobe.exe`...

    nsq-0.3.7.linux-amd64.go1.6

    这个压缩包“nsq-0.3.7.linux-amd64.go1.6”包含了NSQ在0.3.7版本的Linux x86_64架构下的二进制文件,表明它是针对Go 1.6版本编译的。这个版本可能不包含最新的特性或修复,但依然对理解NSQ的基本工作原理和早期版本...

    aria2-1.36.0-aarch64-linux-android-build1.zip

    在压缩包内的文件 "aria2-1.36.0-aarch64-linux-android-build1" 很可能是编译好的可执行文件或包含所有必要组件的二进制包。通常,这样的文件会包含可执行程序、库文件、配置文件、帮助文档等,以便在目标系统上...

    rclone-v1.55.1-linux-amd64

    8. **断点续传**:如果上传或下载过程中因网络问题中断,rclone会记住进度并在恢复连接后继续,防止数据丢失。 9. **日志和统计**:rclone提供详细的日志记录,帮助用户跟踪同步过程中的问题,并提供传输速度、文件...

    上传文件或者图片到OSS

    Base64字符串是通过特定算法对原始二进制数据进行编码的结果,每个字符代表8位二进制数据中的6位,因此,原始数据的长度会增加约33%。 OSS(Object Storage Service)是阿里云提供的一个高可用、高可靠的分布式存储...

    pycurl-7.43.0.3-cp27-cp27m-win_amd64_hzd

    压缩包子文件的文件名 "pycurl-7.43.0.3-cp27-cp27m-win_amd64_hzd.whl" 是Python的wheel文件,它是一个预编译的二进制包,使得用户可以快速安装pycurl而无需通过源码编译。Wheel格式简化了Python包的安装过程,尤其...

    三调 大DB(FJ字段有内容)照片导出

    三调图斑通过云平台举证,产生DB成果,随着三调结束,云平台关闭,想要查证(比如卫片执法)原来举证时的照片是不容易的(DB文件中的照片是以二进制方式存储于FJ 字段的,一般人想看还是有难度的)。这个工具的目的...

    FTP传输软件

    - 自动传输模式:可以设置自动识别文件类型,根据需要选择二进制或文本模式传输。 - 文件断点续传:如果在传输过程中中断,可以从上次断点继续,避免重新传输大文件。 - 预览功能:允许用户在下载前预览文件内容...

    fabric-linux-amd64-1.4.6.zip

    首先,我们来看核心文件"fabric-linux-amd64-1.4.6.zip",这是一个针对AMD64架构的Linux系统提供的Fabric环境压缩包。它包含构建区块链网络所需的全部组件,使得开发者能够快速地进行区块链网络的搭建和测试。 在...

    使用 certutil 实现 Hex2Bin 和 Base64 加解密的方法

    除了证书管理功能之外,`certutil` 还能够进行文件编码转换,例如将十六进制编码(Hex)转换为二进制(Bin)以及 Base64 编码和解码等。 #### 二、Hex2Bin 转换方法 **步骤 1:准备十六进制编码文件** 首先,需要创建...

    下载引擎的设计与实现.pdf

    综上所述,《下载引擎的设计与实现》一文全面介绍了下载引擎的关键技术,包括多线程技术的运用、Winsock控件与TCP协议的结合、断点续传功能的实现机制,以及Base64编码在数据传输中的应用。这些技术的综合应用,构建...

    文件的上传与下载三层架构

    3. 数据库存储:在服务器端,接收到Base64编码的文件后,解码为二进制,然后存储到数据库的BLOB字段。数据库可能选用MySQL、SQL Server或Oracle等,根据项目需求选择。 4. 文件下载:当用户请求下载文件时,服务器...

    计算机应用基础第四次作业.pdf

    6. 内存单位换算:64KB等于65536字节,因为1KB=1024字节。 7. 数制转换:十进制数25对应的二进制是100101,八进制是31,十六进制是19。 8. 寄存器:CPU中存放少量数据的器件称为寄存器,用于快速访问。 9. 十六...

Global site tag (gtag.js) - Google Analytics