PDA

Просмотр полной версии : Преобразование HEX в STRING (в лоб) и обратно



NIMNUL
08.02.2024, 00:02
Доброго дня!
В результате расчёта контрольной суммы, получаю переменную тип BYTE.
В hex, пусть будет, например 16#9A.
Теперь мне нужно получить две переменные типа STRING
В одной должна лежать '9'
Во второй 'A'
Ну а дальше, опять нужно получить hex-коды девятки и буквы A.
Как сделать запись BYTE в STRING (в лоб) - не понимаю.
Есть ли у кого-нибудь идеи?

Емельянов Кирилл
08.02.2024, 01:27
VAR
initialNumber: BYTE := 16#9A;
string_b1: STRING;
string_b0: STRING;
number_b1: BYTE;
number_b0: BYTE;
END_VAR

IF initialNumber.3 = 0 AND initialNumber.2 = 0 AND initialNumber.1 = 0 AND initialNumber.0 = 0 THEN
string_b0 := '0';
number_b0 := 16#0;
ELSIF initialNumber.3 = 0 AND initialNumber.2 = 0 AND initialNumber.1 = 0 AND initialNumber.0 = 1 THEN
string_b0 := '1';
number_b0 := 16#1;
ELSIF initialNumber.3 = 0 AND initialNumber.2 = 0 AND initialNumber.1 = 1 AND initialNumber.0 = 0 THEN
string_b0 := '2';
number_b0 := 16#2;
ELSIF initialNumber.3 = 0 AND initialNumber.2 = 0 AND initialNumber.1 = 1 AND initialNumber.0 = 1 THEN
string_b0 := '3';
number_b0 := 16#3;
ELSIF initialNumber.3 = 0 AND initialNumber.2 = 1 AND initialNumber.1 = 0 AND initialNumber.0 = 0 THEN
string_b0 := '4';
number_b0 := 16#4;
ELSIF initialNumber.3 = 0 AND initialNumber.2 = 1 AND initialNumber.1 = 0 AND initialNumber.0 = 1 THEN
string_b0 := '5';
number_b0 := 16#5;
ELSIF initialNumber.3 = 0 AND initialNumber.2 = 1 AND initialNumber.1 = 1 AND initialNumber.0 = 0 THEN
string_b0 := '6';
number_b0 := 16#6;
ELSIF initialNumber.3 = 0 AND initialNumber.2 = 1 AND initialNumber.1 = 1 AND initialNumber.0 = 1 THEN
string_b0 := '7';
number_b0 := 16#7;
ELSIF initialNumber.3 = 1 AND initialNumber.2 = 0 AND initialNumber.1 = 0 AND initialNumber.0 = 0 THEN
string_b0 := '8';
number_b0 := 16#8;
ELSIF initialNumber.3 = 1 AND initialNumber.2 = 0 AND initialNumber.1 = 0 AND initialNumber.0 = 1 THEN
string_b0 := '9';
number_b0 := 16#9;
ELSIF initialNumber.3 = 1 AND initialNumber.2 = 0 AND initialNumber.1 = 1 AND initialNumber.0 = 0 THEN
string_b0 := 'A';
number_b0 := 16#A;
ELSIF initialNumber.3 = 1 AND initialNumber.2 = 0 AND initialNumber.1 = 1 AND initialNumber.0 = 1 THEN
string_b0 := 'B';
number_b0 := 16#B;
ELSIF initialNumber.3 = 1 AND initialNumber.2 = 1 AND initialNumber.1 = 0 AND initialNumber.0 = 0 THEN
string_b0 := 'C';
number_b0 := 16#C;
ELSIF initialNumber.3 = 1 AND initialNumber.2 = 1 AND initialNumber.1 = 0 AND initialNumber.0 = 1 THEN
string_b0 := 'D';
number_b0 := 16#D;
ELSIF initialNumber.3 = 1 AND initialNumber.2 = 1 AND initialNumber.1 = 1 AND initialNumber.0 = 0 THEN
string_b0 := 'E';
number_b0 := 16#E;
ELSIF initialNumber.3 = 1 AND initialNumber.2 = 1 AND initialNumber.1 = 1 AND initialNumber.0 = 1 THEN
string_b0 := 'F';
number_b0 := 16#F;
END_IF
IF initialNumber.7 = 0 AND initialNumber.6 = 0 AND initialNumber.5 = 0 AND initialNumber.4 = 0 THEN
string_b1 := '0';
number_b1 := 16#0;
ELSIF initialNumber.7 = 0 AND initialNumber.6 = 0 AND initialNumber.5 = 0 AND initialNumber.4 = 1 THEN
string_b1 := '1';
number_b1 := 16#1;
ELSIF initialNumber.7 = 0 AND initialNumber.6 = 0 AND initialNumber.5 = 1 AND initialNumber.4 = 0 THEN
string_b1 := '2';
number_b1 := 16#2;
ELSIF initialNumber.7 = 0 AND initialNumber.6 = 0 AND initialNumber.5 = 1 AND initialNumber.4 = 1 THEN
string_b1 := '3';
number_b1 := 16#3;
ELSIF initialNumber.7 = 0 AND initialNumber.6 = 1 AND initialNumber.5 = 0 AND initialNumber.4 = 0 THEN
string_b1 := '4';
number_b1 := 16#4;
ELSIF initialNumber.7 = 0 AND initialNumber.6 = 1 AND initialNumber.5 = 0 AND initialNumber.4 = 1 THEN
string_b1 := '5';
number_b1 := 16#5;
ELSIF initialNumber.7 = 0 AND initialNumber.6 = 1 AND initialNumber.5 = 1 AND initialNumber.4 = 0 THEN
string_b1 := '6';
number_b1 := 16#6;
ELSIF initialNumber.7 = 0 AND initialNumber.6 = 1 AND initialNumber.5 = 1 AND initialNumber.4 = 1 THEN
string_b1 := '7';
number_b1 := 16#7;
ELSIF initialNumber.7 = 1 AND initialNumber.6 = 0 AND initialNumber.5 = 0 AND initialNumber.4 = 0 THEN
string_b1 := '8';
number_b1 := 16#8;
ELSIF initialNumber.7 = 1 AND initialNumber.6 = 0 AND initialNumber.5 = 0 AND initialNumber.4 = 1 THEN
string_b1 := '9';
number_b1 := 16#9;
ELSIF initialNumber.7 = 1 AND initialNumber.6 = 0 AND initialNumber.5 = 1 AND initialNumber.4 = 0 THEN
string_b1 := 'A';
number_b1 := 16#A;
ELSIF initialNumber.7 = 1 AND initialNumber.6 = 0 AND initialNumber.5 = 1 AND initialNumber.4 = 1 THEN
string_b1 := 'B';
number_b1 := 16#B;
ELSIF initialNumber.7 = 1 AND initialNumber.6 = 1 AND initialNumber.5 = 0 AND initialNumber.4 = 0 THEN
string_b1 := 'C';
number_b1 := 16#C;
ELSIF initialNumber.7 = 1 AND initialNumber.6 = 1 AND initialNumber.5 = 0 AND initialNumber.4 = 1 THEN
string_b1 := 'D';
number_b1 := 16#D;
ELSIF initialNumber.7 = 1 AND initialNumber.6 = 1 AND initialNumber.5 = 1 AND initialNumber.4 = 0 THEN
string_b1 := 'E';
number_b1 := 16#E;
ELSIF initialNumber.7 = 1 AND initialNumber.6 = 1 AND initialNumber.5 = 1 AND initialNumber.4 = 1 THEN
string_b1 := 'F';
number_b1 := 16#F;
END_IF

capzap
08.02.2024, 06:48
Доброго дня!
В результате расчёта контрольной суммы, получаю переменную тип BYTE.
В hex, пусть будет, например 16#9A.
Теперь мне нужно получить две переменные типа STRING
В одной должна лежать '9'
Во второй 'A'
Ну а дальше, опять нужно получить hex-коды девятки и буквы A.
Как сделать запись BYTE в STRING (в лоб) - не понимаю.
Есть ли у кого-нибудь идеи?

Oscat библиотека, там давно уже все продумано

Евгений Кислов
08.02.2024, 07:01
Еще один вариант - функция WORD_TO_HEX_STR из библиотеки OwenStringUtils.