Odin语言:如何将字节数组转为ASCII字符/字符串并打印?
Odin语言读取用户输入并打印文本内容的解决方法
刚接触Odin语言,官方文档涵盖变量、循环、字符串等内容,但未找到获取用户输入并打印的相关方法。编写了如下代码:
import "core:fmt" import "core:os" import "core:strings" main :: proc() { fmt.print("Enter something: "); buf: [256]byte; num_bytes, err := os.read(os.stdin, buf[:]); fmt.println("You entered:"); fmt.print(buf); }
运行该代码时,输入“hello”后输出的是字节数组的数值(如[104, 101, 108, 108, 111, 13, 10, 0, ...]),而非文本内容。使用的是Windows系统,希望将读取到的字节数组以ASCII字符形式打印,或者转换为字符串后打印,请问该如何实现?
解决方法
方法1:直接打印有效字节的ASCII内容
fmt.print(buf)会输出整个字节数组的结构(包括未使用的空字节),只需指定实际读取到的字节范围即可打印文本:
import "core:fmt" import "core:os" main :: proc() { fmt.print("Enter something: "); buf: [256]byte; num_bytes, err := os.read(os.stdin, buf[:]); // 可选:处理读取错误 if err != nil { fmt.printf("读取错误: %v\n", err); return; } fmt.println("You entered:"); fmt.print(buf[:num_bytes]); // 仅打印实际读取的字节内容 }
方法2:转换为字符串后打印
利用Odin的字符串构造语法,将有效字节切片转为字符串再打印,逻辑更直观:
import "core:fmt" import "core:os" main :: proc() { fmt.print("Enter something: "); buf: [256]byte; num_bytes, err := os.read(os.stdin, buf[:]); if err != nil { fmt.printf("读取错误: %v\n", err); return; } input_str := string(buf[:num_bytes]); // 字节切片转字符串 fmt.println("You entered:"); fmt.print(input_str); }
额外优化:去除输入末尾的换行符
Windows下输入的换行符是\r\n,如果需要去掉可以用strings.trim_suffix处理:
import "core:fmt" import "core:os" import "core:strings" main :: proc() { fmt.print("Enter something: "); buf: [256]byte; num_bytes, err := os.read(os.stdin, buf[:]); if err != nil { fmt.printf("读取错误: %v\n", err); return; } input_str := string(buf[:num_bytes]); // 移除Windows换行符 input_str = strings.trim_suffix(input_str, "\r\n"); // 兼容Linux/macOS的换行符(可选) input_str = strings.trim_suffix(input_str, "\n"); fmt.println("You entered:"); fmt.print(input_str); }
内容的提问来源于stack exchange,提问作者Coding with Tom
相关产品推荐
相关产品推荐

