通过 Tcl 将字符转换为十六进制

问题描述 投票:0回答:2

我正在尝试使用 tcl 将一些字符转换为十六进制。

我通常会做这样的事情:

[binary format a* 'o']
返回111,这是'o'的int表示,然后可以转换。

但是,我检索字符的方式,

[value string_split]
返回“o”而不是“o”,导致函数抛出错误,本质上就像这样做:
[binary format a* "o"]
返回“错误:没有任何东西被命名为“o””

那么,tcl 上下文中的“o”和“o”之间有什么区别,以及如何让我的

[binary format a* [value string_split]]
调用像
[binary format a* 'o']
那样返回 111。

需要注意的是,我正在使用 TheFoundry 的 Nuke 来执行此操作,我不知道他们到底使用的是哪个版本的 TCL,但它是一个相当旧的版本。

tcl
2个回答
3
投票

您可以使用格式为 scan

%c
 来获取字符的 Unicode 代码点值,然后使用 
format
将其打印为十六进制:

#!/usr/bin/env tclsh

set o_str o
scan $o_str %c o_value
puts $o_value ;# 111
puts [format 0x%x $o_value] ;# 0x6f

0
投票

对于字符串的一般情况,包括长度为1的字符串,从Tcl 8.6开始也可以这样做:

binary encode hex $input_string
binary decode hex $hex_string

这假设

$input_string
已经是“二进制”,因此对于文本来说,明智的做法是首先:

set input_string [encoding convertto utf-8 $input_string]
© www.soinside.com 2019 - 2024. All rights reserved.