Кодировать значение как base64 - PullRequest
1 голос
/ 02 декабря 2009

Я пытаюсь написать настройку в Lyris ListManager (10.2). Язык TCL, о котором я очень мало знаю. Нам нужно закодировать значение как base64 (или, на самом деле, все, что скрывает параметр строки запроса), но я не могу понять, как это сделать. Есть ли команда, родная для TCL, чтобы сделать это?

Ответы [ 4 ]

2 голосов
/ 03 декабря 2009

После вашей проблемы с использованием пакета 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, вы можете просто скопировать / вставить весь файл base64 из дистрибутива tcllib http://sourceforge.net/projects/tcllib/files/tcllib/1.11.1/ в свой код (удалите строку «package обеспечивает»)

2 голосов
/ 02 декабря 2009

Наличие 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]]
1 голос
/ 03 декабря 2009

Если было бы достаточно просто кодировать в шестнадцатеричном формате, вы можете использовать команду binary следующим образом:

% set query "Hello, world"
Hello, world
% binary scan $query H* hexquery
1
% puts $hexquery
48656c6c6f2c20776f726c64
1 голос
/ 02 декабря 2009

Если у вас есть возможность загружать библиотеки Tcl (пакеты / модули) в вашу среду, вы можете просто использовать реализацию Tcllib . Вот из-за чего Винко Врсалович показывал команду в своем ответе.

% package require base64
2.4
% base64::encode bob
Ym9i
...