Java实现字符串转换为十进制ASCII码的实战指南

 更新时间:2026年05月26日 08:51:25   作者:加号3  
将Java字符串转换为十进制ASCII码是文本处理、协议编码、数据序列化和底层通信中的常见需求,下面我们就来看看具体的实现方法,希望对大家有所帮助

将Java字符串转换为十进制ASCII码是文本处理、协议编码、数据序列化和底层通信中的常见需求。这一过程涉及字符编码、数值转换和格式化输出等多个技术层面。

一、核心认知:字符串与ASCII的本质关系

Java字符串的双层结构

层次类型说明
逻辑层String(Unicode字符序列)人类可读的文本
物理层byte[](UTF-16或指定编码)JVM内部存储或网络传输字节

关键洞察:Java的char本质上是UTF-16编码单元(0-65535),而ASCII仅是其子集(0-127)。转换时需明确处理范围溢出。

ASCII码范围界定

类型十进制范围说明
标准ASCII0-1277位编码,全球通用
扩展ASCII128-2558位,平台相关(ISO-8859-1等)
非ASCII(Unicode)256-65535中文、 emoji 等,超出传统ASCII

转换策略选择

  • 严格ASCII环境:过滤或报错处理非ASCII字符
  • 扩展场景:输出大于127的十进制值,或明确标注为Unicode码点

二、转换场景分类

场景A:单字符转十进制ASCII

输入字符内部编码十进制输出说明
'A'U+004165大写字母A
'a'U+006197小写字母a
'0'U+003048数字字符0
'\n'U+000A10换行控制符(LF)
'\r'U+000D13回车控制符(CR)
' 'U+002032空格(Space)
'中'U+4E2D20013中文字符(超ASCII)

场景B:字符串批量转换

模式输入十进制输出示例适用场景
紧凑连续"ABC""656667"紧凑存储、无分隔
空格分隔"ABC""65 66 67"可读调试、日志输出
逗号分隔"ABC""65,66,67"CSV格式、数据交换
数组格式"ABC""[65, 66, 67]"编程语言风格
定宽格式"ABC""065 066 067"对齐显示、固定宽度
混合标注"A\n""65(10)"控制字符特殊标记

场景C:特殊处理需求

需求处理方式示例
非ASCII过滤替换为占位符或跳过"A中B""65 66"
非ASCII保留输出完整Unicode码点"A中B""65 20013 66"
控制字符转义输出名称而非数值"\n""LF""10(LF)"
字节序标记添加BOM标识"\uFEFFABC"65279 65 66 67

三、代码实现

/**
     * 字符串转十进制ASCII码
     *
     * @param str
     * @return {@link List}<{@link Byte}>
     */
    public List<Byte> strToAscii(String str) {
        List<Byte> valueByte = new ArrayList<>();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            // 第二个参数16表示10进制
            Integer value = Integer.parseInt(Integer.toString(c, 10));
            valueByte.add(ByteUtil.intToByte(value));
        }
        return valueByte;
    }

四、特殊字符处理策略

控制字符可视化

字符十进制标准名替代输出
NUL0Null"0(NUL)""NUL"
SOH1Start of Heading"1(SOH)"
STX2Start of Text"2(STX)"
ETX3End of Text"3(ETX)"
EOT4End of Transmission"4(EOT)"
ENQ5Enquiry"5(ENQ)"
ACK6Acknowledge"6(ACK)"
BEL7Bell"7(BEL)""\a"
BS8Backspace"8(BS)""\b"
HT9Horizontal Tab"9(TAB)""\t"
LF10Line Feed"10(LF)""\n"
VT11Vertical Tab"11(VT)"
FF12Form Feed"12(FF)""\f"
CR13Carriage Return"13(CR)""\r"
ESC27Escape"27(ESC)""\e"
SP32Space"32""SPACE"
DEL127Delete"127(DEL)"

实现策略:转换前查表映射,或输出后附加注释。

非ASCII字符处理

策略处理方式输出示例(输入"中")
直接输出输出完整Unicode码点"20013"
过滤剔除跳过非ASCII字符无输出
替换标记替换为占位符"[NON-ASCII:20013]"
异常抛出IllegalArgumentException中断处理
编码分解UTF-8字节序列"228 184 173"(3字节)

五、性能优化策略

技术效果适用场景
StringBuilder预分配避免扩容,减少GC通用批量
char[]直接填充无方法调用开销极致性能
Arrays.parallelPrefix并行累积超大规模数组
IntStream并行多核利用Java 8+大数据

六、知识扩展

以下是将字符串转换为十进制 ASCII 码的 Java 实现。

代码示例

public class StringToAscii {
    /**
     * 将字符串转换为十进制 ASCII 码数组(每个字符对应一个 int 值)
     * @param str 输入字符串
     * @return 十进制 ASCII 码数组
     */
    public static int[] toAsciiArray(String str) {
        if (str == null) {
            return new int[0];
        }
        int[] result = new int[str.length()];
        for (int i = 0; i < str.length(); i++) {
            result[i] = (int) str.charAt(i);  // char 自动转换为 int,得到 Unicode 码点(ASCII 字符与 ASCII 值一致)
        }
        return result;
    }
    /**
     * 打印字符串每个字符的十进制 ASCII 码(空格分隔)
     * @param str 输入字符串
     */
    public static void printAscii(String str) {
        if (str == null || str.isEmpty()) {
            System.out.println("字符串为空");
            return;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            sb.append((int) str.charAt(i));
            if (i != str.length() - 1) {
                sb.append(" ");
            }
        }
        System.out.println(sb.toString());
    }
    public static void main(String[] args) {
        String input = "Hello";
        int[] asciiValues = toAsciiArray(input);
        System.out.print("十进制 ASCII 码: ");
        for (int val : asciiValues) {
            System.out.print(val + " ");
        }
        System.out.println();
        // 直接打印
        System.out.print("另一种输出: ");
        printAscii(input);
    }
}

运行结果

十进制 ASCII 码: 72 101 108 108 111 
另一种输出: 72 101 108 108 111

代码说明

  • 核心转换(int) str.charAt(i) 将每个字符强制转换为 int,得到该字符的 Unicode 码点。对于 ASCII 字符(0~127),码点值就是其 ASCII 码。
  • 返回数组toAsciiArray 方法返回一个 int[],便于后续处理。
  • 直接打印printAscii 方法将 ASCII 码以空格分隔打印。
  • 处理空字符串:做了简单的空值判断。

补充:如果希望得到每个字符的 ASCII 码并拼接成字符串(如 "72101108108111")

public static String toAsciiString(String str) {
    StringBuilder sb = new StringBuilder();
    for (char c : str.toCharArray()) {
        sb.append((int) c);
    }
    return sb.toString();
}

七、总结

核心原则

  • 编码范围明确:ASCII是Unicode子集,处理前确认范围策略
  • 分隔符约定:紧凑、空格、逗号等格式需文档化
  • 控制字符显式化:不可打印字符特殊标注,增强可读性
  • 性能分层优化:只有实测瓶颈处使用查表等激进方案
  • 可逆性验证:关键数据确保编解码闭环一致

以上就是Java实现字符串转换为十进制ASCII码的实战指南的详细内容,更多关于Java字符串转十进制ASCII码的资料请关注脚本之家其它相关文章!

相关文章

  • Java使用GUI绘制线条的示例

    Java使用GUI绘制线条的示例

    这篇文章主要介绍了Java使用GUI绘制线条的示例,帮助大家更好的理解和学习java gui编程,感兴趣的朋友可以了解下
    2020-09-09
  • Java中接口和抽象类的异同以及具体的使用场景

    Java中接口和抽象类的异同以及具体的使用场景

    文章主要介绍了Java中接口(Interface)和抽象类(AbstractClass)的区别和联系,包括相同点和不同点,以及它们在实际开发中的具体使用场景,结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • springboot项目打包成jar包的图文教程

    springboot项目打包成jar包的图文教程

    有时候我们会用IDEA来开发一些小工具,需要打成可运行的JAR包,这篇文章主要给大家介绍了关于springboot项目打包成jar包的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Java利用Redis实现高并发计数器的示例代码

    Java利用Redis实现高并发计数器的示例代码

    这篇文章主要介绍了Java利用Redis实现高并发计数器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • java中CompleteFuture与Future的区别小结

    java中CompleteFuture与Future的区别小结

    本文主要介绍了java中CompleteFuture与Future的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • java并发编程专题(一)----线程基础知识

    java并发编程专题(一)----线程基础知识

    这篇文章主要介绍了java并发编程线程的基础知识,文中讲解非常详细,帮助大家更好的学习JAVA并发编程,感兴趣想学习JAVA的可以了解下
    2020-06-06
  • 图解Java中插入排序算法的原理与实现

    图解Java中插入排序算法的原理与实现

    插入排序的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。本文将通过图片详解插入排序的原理及实现,需要的可以参考一下
    2022-08-08
  • MyBatis与MyBatis-Plus的区别详解

    MyBatis与MyBatis-Plus的区别详解

    本文主要介绍了MyBatis与MyBatis-Plus的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • IDEA集成Gitee码云的实现步骤

    IDEA集成Gitee码云的实现步骤

    本文主要介绍了IDEA集成Gitee码云的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 浅谈synchronized方法对非synchronized方法的影响

    浅谈synchronized方法对非synchronized方法的影响

    下面小编就为大家带来一篇浅谈synchronized方法对非synchronized方法的影响。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10

最新评论