1

我正在尝试在 Lyris ListManager (10.2) 中编写自定义。语言是TCL,我对此知之甚少。我们需要将一个值编码为 base64(或者实际上,任何混淆查询字符串参数的东西),但我似乎无法弄清楚如何。TCL 是否有本地命令来执行此操作?

4

4 回答 4

2

http://tcllib.sourceforge.net/doc/base64.html的存在似乎表明没有原生函数。您可以复制源并将其添加到您的修改中。

% base64::encode "Hello, world"
SGVsbG8sIHdvcmxk

% base64::encode [string repeat xyz 20]
eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6
eHl6eHl6eHl6
% base64::encode -wrapchar "" [string repeat xyz 20]
eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6eHl6

# NOTE: base64 encodes BINARY strings.
% set chemical [encoding convertto utf-8 "C\u2088H\u2081\u2080N\u2084O\u2082"]
% set encoded [base64::encode $chemical]
Q+KCiEjigoHigoBO4oKET+KCgg==
% set caffeine [encoding convertfrom utf-8 [base64::decode $encoded]]
于 2009-12-02T15:59:29.380 回答
2

如果您能够将 Tcl 库(包/模块)加载到您的环境中,则可以只使用Tcllib实现。这就是 Vinko Vrsalovic 在他的回应中表现出的命令。

% package require base64
2.4
% base64::encode bob
Ym9i
于 2009-12-02T19:01:01.487 回答
2

根据您的问题使用 base64 包,您可以使用这些小过程将您的数据转换为十六进制并返回。需要 Tcl > 8

proc BIN2HEX { text }   { binary scan $text H* result; return $result }
proc HEX2BIN { hex }    { return [binary format H* $hex] }
set hex [BIN2HEX $yourText]
set textAgain [HEX2BIN $hex]

如果你真的需要 base64,你可以从 tcllib 发行版http://sourceforge.net/projects/tcllib/files/tcllib/1.11.1/复制/粘贴整个 base64 文件到你的代码中(删除“包提供”行)

于 2009-12-03T10:32:51.910 回答
1

如果仅以十六进制编码就足够了,则可以使用二进制命令,如下所示:

% set query "Hello, world"
Hello, world
% binary scan $query H* hexquery
1
% puts $hexquery
48656c6c6f2c20776f726c64
于 2009-12-03T08:54:28.827 回答