如何在Java中合并%02X与%45s格式化,实现十六进制带长度限制输出?
解决方案
要同时实现两位十六进制格式化输出和每行45字符长度限制,没法直接用单一printf格式串完成(换行需要依赖输出计数),但可以把格式控制和换行逻辑整合到同一个循环的printf调用里,核心是跟踪已输出的字符数,达到阈值时自动换行。
代码实现
int byteCount = 0; int currentByte; while ((currentByte = file.read()) != -1) { // 输出两位十六进制,同时判断是否需要换行 System.out.printf("%02X%s", currentByte, ++byteCount % 22 == 0 ? "\n" : ""); } // 处理最后一行未完成的换行 if (byteCount % 22 != 0) { System.out.println(); }
逻辑说明
%02X负责将每个字节格式化为两位十六进制(不足两位补0),每个输出占2个字符。- 由于每行限制45字符,22个十六进制值刚好占44字符(不超过限制),第23个会达到46字符,因此每输出22个字节就触发换行。
- 用
++byteCount % 22 == 0判断是否达到换行条件,将换行符作为第二个参数传入printf,实现格式和换行的统一调用。
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

