Как конвертировать шестнадцатеричный в десятичный в SAS?

У меня есть: строка с шестнадцатеричными значениями каждые 4 позиции

00F701C101C900EC01E001D2

Я нуждаюсь:

Разделите эти значения из 4 в 4 позиции и преобразуйте их в десятичные числа следующим образом:

247, 449, 457, 480, 466

Моя колонка может иметь до 1200 шестнадцатеричных позиций

Вы можете мне помочь?

Tks!!!

2 ответа

Это работает:

data out;
    hex = "00F701C101C900EC01E001D2";
    do while(hex ne "");
        valHex = substr(hex, 1, 4);
        hex = substr(hex, 5);
        valDec = input(valHex, hex4.);
        output;
    end;
run;

но вы захотите добавить больше проверки ошибок и т. д. для вашего реального решения.

Извините, я был быстро. Это синтаксис SQL-сервера, вероятно, не работает для вас, но вы можете получить представление...

Попробуйте это так:

DECLARE @YourString VARCHAR(100)='00F701C101C900EC01E001D2';
WITH Separated AS
(
    SELECT CAST(LEFT(@YourString,4) AS VARCHAR(MAX)) AS SourceString
          ,CAST(SUBSTRING(@YourString,5,10000) AS VARCHAR(MAX)) AS RestString
    UNION ALL
    SELECT LEFT(RestString,4) 
          ,SUBSTRING(RestString,5,10000)
    FROM Separated
    WHERE LEN(RestString)>=4
)
SELECT *
      ,CAST(sys.fn_cdc_hexstrtobin(SourceString) AS VARBINARY(2))
      ,CAST(CAST(sys.fn_cdc_hexstrtobin(SourceString) AS VARBINARY(2)) AS INT)
FROM Separated

Результат

+--------------+----------------------+--------------------+--------------------+
| SourceString | RestString           | (Kein Spaltenname) | (Kein Spaltenname) |
+--------------+----------------------+--------------------+--------------------+
| 00F7         | 01C101C900EC01E001D2 | 0x00F7             | 247                |
+--------------+----------------------+--------------------+--------------------+
| 01C1         | 01C900EC01E001D2     | 0x01C1             | 449                |
+--------------+----------------------+--------------------+--------------------+
| 01C9         | 00EC01E001D2         | 0x01C9             | 457                |
+--------------+----------------------+--------------------+--------------------+
| 00EC         | 01E001D2             | 0x00EC             | 236                |
+--------------+----------------------+--------------------+--------------------+
| 01E0         | 01D2                 | 0x01E0             | 480                |
+--------------+----------------------+--------------------+--------------------+
| 01D2         |                      | 0x01D2             | 466                |
+--------------+----------------------+--------------------+--------------------+
Другие вопросы по тегам