Я спрашиваю, зачем вам это нужно ...
Есть веские причины для преобразования шестнадцатеричной строки обратно в ее символьный эквивалент ... например, кто-то отправляет вам 32-байтовую строку UUID, и вы хотите, чтобы она вернулась, если это 16-байтовая двоичная форма.
Но нет никаких оснований ONLY FOR BACK-UP ON LEVEL ONE FOR CRANES
должен был быть преобразован в гекс.
Я подозреваю, что вам нужно опубликовать новый вопрос, спрашивающий, почему вы не получаете удобочитаемые строки.
Однако, в ответ на этот вопрос ... В IBM i есть функция MI Преобразование символа в шестнадцатеричное (CVTCH) , которое легко вызывается из любого языка ILE. Вы можете обернуть этот вызов функции в пользовательскую функцию, чтобы использовать ее из SQL.
Обратите внимание, что вам нужно знать, что представляет собой шестнадцатеричная строка, EBCDIC, ASCII или Unicode, потому что вы должны быть в состоянии рассказать системе, с чего вы начали. Оттуда есть способы преобразования между кодированием.
Вот статья, в которой показано, как вызвать функцию MI из RPG.
Использование функций MI в программах RPG
Более современная версия прототипа в свободной форме, в которой используются усовершенствования ключевого слова CCSID, может выглядеть как
dcl-pr FromHex extproc('cvtch');
charString char(32767) ccsid(*UTF8) options(*varsize);
hexString char(65534) ccsid(*HEX) const options(*varsize);
hexStringLen int(10) value;
end-pr;
При использовании вышеуказанного прототипа система будет обрабатывать строку символов, которая возвращается как UTF8 (ccsid 1208). Но все, что я делаю, говорит системе, как интерпретировать возвращаемые байты. Если строка была на самом деле EBCDIC, я собираюсь получить мусор.
Я думаю, вы могли бы даже определить функцию cvtch
непосредственно как внешний UDF без необходимости использования оболочки ILE. Мне бы пришлось поиграть с этим ...
Не обращайте внимания на эту идею ... у cvtch есть только параметры, а не возвращаемое значение. Использование оболочки ILE - лучший способ перевести выходной параметр в возвращаемое значение для использования в качестве UDF.