Мне пришлось написать функцию с нуля, основываясь на ответе Майка и старой ветке на форумах IBM от пользователя Mathias Mamsch.
У меня много сомнений по поводу обработки буфера, но она отлично работает для моих целей:
Эта функция выполняет перевод строки Hex2ascii.
string Hex2Ascii(string &stringIn){
Buffer buf = create
string hexval
while(length(stringIn)>0){
hexval = iterateOnString(stringIn)
//print(charOf(intOfHex))
//print hexval
//print charOf(intOfHex(hexval))
buf += charOf(intOfHex(hexval))
}
return stringOf buf
}
Вызывает две другие функции;iterateOnString возвращает два символа для формирования преобразуемого байта и удаляет его из исходной строки:
string iterateOnString(string &stringIn){
string StringOut
int x = length(stringIn)
if(x<2){
return ""
}
StringOut = stringIn[0:1]
stringIn = stringIn[2:]
return StringOut
}
, затем intOfHex преобразует шестнадцатеричное значение в значение int, затем результат передается в charOf ()
int intOfHex( string s ) {
if( "0x" == s[0:1] ) {
return intOf( realOf( eval_ "return_ (" s ") \"\"" ) )
} else {
return intOf( realOf( eval_ "return_ (0x" s ") \"\"" ) )
}
}
Любые советы, предложения по оптимизации или критика приветствуются.
KR