其实进行进制转换关键是要把位、字节、字符、字符串的概念弄清楚。
一个带符号的字节能表示的数值范围是-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;
}
分享到:
相关推荐
3. **文档**:可能会有帮助文件、README 或者 CHANGES 文件,提供关于软件的使用指南、版本变更日志以及版权信息。 4. **库文件**:如果 aria2 使用了某些特定的库,这些库的二进制文件可能会被包含在内,以便在目标...
这个版本的wget被编译为静态二进制文件,这意味着它不依赖任何额外的动态链接库(DLLs),可以直接在64位Windows操作系统上独立运行。 静态编译的优势在于简化了部署过程,用户只需将wget.exe复制到目标机器上,...
在Linux系统中,RPM包是用于管理和控制软件的一种方式,它包含了软件的源代码编译后的二进制文件、库文件、配置文件以及必要的依赖关系。安装RPM包可以通过使用`rpm`命令来完成,例如: ```bash sudo rpm -ivh wget...
9. **断点续传**:如果网络中断,curl能够记住断点并从上次的位置继续下载。 10. **时间戳比较**:在下载文件前,curl会检查本地文件的时间戳,如果远程文件未更新,则避免不必要的下载。 **安装与使用:** 在...
描述中的“csdn曝光率大,那就资源反馈吧,无法设置免费就5个积分吧,测试过能正常get put 文件当然你得会基础的使用”表明这个资源可能来自于一个程序员社区,如CSDN,并且提供了关于如何在Windows环境中使用TFTP的...
4. **断点续传**:如果在传输过程中中断,可以从上次中断的地方继续,避免了重新传输大文件。 5. **传输队列**:可以设置文件传输的优先级和顺序,有效管理并发任务。 6. **传输速率限制**:允许用户自定义上传和...
在压缩包内的“华硕AC1200HP改版固件适用于斐讯K1和K2RT-AC1200HP_MT7620_8M_64M.trx”文件,是改版固件的实际二进制文件,用户可以通过路由器的管理界面进行升级。而“新建文本文档.txt”可能包含了升级步骤、注意...
"bin"目录下的静态编译二进制文件是FFmpeg的核心,可以直接在Windows 64位系统上运行,无需额外安装其他依赖库。这些文件包括主程序`ffmpeg.exe`和其他辅助工具,如`ffplay.exe`(用于播放视频)和`ffprobe.exe`...
这个压缩包“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" 很可能是编译好的可执行文件或包含所有必要组件的二进制包。通常,这样的文件会包含可执行程序、库文件、配置文件、帮助文档等,以便在目标系统上...
8. **断点续传**:如果上传或下载过程中因网络问题中断,rclone会记住进度并在恢复连接后继续,防止数据丢失。 9. **日志和统计**:rclone提供详细的日志记录,帮助用户跟踪同步过程中的问题,并提供传输速度、文件...
Base64字符串是通过特定算法对原始二进制数据进行编码的结果,每个字符代表8位二进制数据中的6位,因此,原始数据的长度会增加约33%。 OSS(Object Storage Service)是阿里云提供的一个高可用、高可靠的分布式存储...
压缩包子文件的文件名 "pycurl-7.43.0.3-cp27-cp27m-win_amd64_hzd.whl" 是Python的wheel文件,它是一个预编译的二进制包,使得用户可以快速安装pycurl而无需通过源码编译。Wheel格式简化了Python包的安装过程,尤其...
三调图斑通过云平台举证,产生DB成果,随着三调结束,云平台关闭,想要查证(比如卫片执法)原来举证时的照片是不容易的(DB文件中的照片是以二进制方式存储于FJ 字段的,一般人想看还是有难度的)。这个工具的目的...
- 自动传输模式:可以设置自动识别文件类型,根据需要选择二进制或文本模式传输。 - 文件断点续传:如果在传输过程中中断,可以从上次断点继续,避免重新传输大文件。 - 预览功能:允许用户在下载前预览文件内容...
首先,我们来看核心文件"fabric-linux-amd64-1.4.6.zip",这是一个针对AMD64架构的Linux系统提供的Fabric环境压缩包。它包含构建区块链网络所需的全部组件,使得开发者能够快速地进行区块链网络的搭建和测试。 在...
除了证书管理功能之外,`certutil` 还能够进行文件编码转换,例如将十六进制编码(Hex)转换为二进制(Bin)以及 Base64 编码和解码等。 #### 二、Hex2Bin 转换方法 **步骤 1:准备十六进制编码文件** 首先,需要创建...
综上所述,《下载引擎的设计与实现》一文全面介绍了下载引擎的关键技术,包括多线程技术的运用、Winsock控件与TCP协议的结合、断点续传功能的实现机制,以及Base64编码在数据传输中的应用。这些技术的综合应用,构建...
3. 数据库存储:在服务器端,接收到Base64编码的文件后,解码为二进制,然后存储到数据库的BLOB字段。数据库可能选用MySQL、SQL Server或Oracle等,根据项目需求选择。 4. 文件下载:当用户请求下载文件时,服务器...
6. 内存单位换算:64KB等于65536字节,因为1KB=1024字节。 7. 数制转换:十进制数25对应的二进制是100101,八进制是31,十六进制是19。 8. 寄存器:CPU中存放少量数据的器件称为寄存器,用于快速访问。 9. 十六...