Tcl用于获取字符串中每个字符的ASCII码

Geo*_*pty 7 string ascii list tcl utf-16

我需要为字符串中的每个字符获取ASCII字符.实际上它是(小)文件中的每个字符.以下前3行成功将所有文件的内容拉入字符串(根据此配方):

set fp [open "store_order_create_ddl.sql" r]
set data [read $fp]
close $fp
Run Code Online (Sandbox Code Playgroud)

我相信我正确地辨别出字符的ASCII码(参见http://wiki.tcl.tk/1497).但是我在弄清楚如何遍历字符串中的每个字符时遇到了问题.

首先,我不认为以下是用Tcl循环字符串中的字符的特殊惯用方法.其次,更重要的是,它行为不正确,在每个字符之间插入一个额外的元素.

下面是我编写的代码,用于处理上面"数据"变量集的内容,然后是一些示例输出.

码:

for {set i 0} {$i < [string length $data]} {incr i} {
  set char [string index $data $i]
  scan $char %c ascii
  puts "char: $char (ascii: $ascii)"
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

char: C (ascii: 67)
char:  (ascii: 0)
char: R (ascii: 82)
char:  (ascii: 0)
char: E (ascii: 69)
char:  (ascii: 0)
char: A (ascii: 65)
char:  (ascii: 0)
char: T (ascii: 84)
char:  (ascii: 0)
char: E (ascii: 69)
char:  (ascii: 0)
char:   (ascii: 32)
char:  (ascii: 0)
char: T (ascii: 84)
char:  (ascii: 0)
char: A (ascii: 65)
char:  (ascii: 0)
char: B (ascii: 66)
char:  (ascii: 0)
char: L (ascii: 76)
char:  (ascii: 0)
char: E (ascii: 69)
Run Code Online (Sandbox Code Playgroud)

RHS*_*ger 11

以下代码应该有效:

set data {CREATE TABLE}
foreach char [split $data ""] {
    lappend output [scan $char %c]
}
set output ;# 67 82 69 65 84 69 32 84 65 66 76 69
Run Code Online (Sandbox Code Playgroud)

对于输出中的额外字符,似乎问题在于来自文件的输入数据.是否有某些原因在文件中的每个字符之间都会有空字符(\ 0)?