2016-11-14 37 views
-2

說我有這個值xxx(十六進制)007800780078
如何使用按位運算將十六進制值轉換回字符? 我可以嗎?使用按位運算將HEX轉換爲字符

+0

谷歌的你的朋友。 – Charles

+0

嗨@Charles,我知道(並找到)如何轉換十六進制數字,但找不到任何有關字符串的好消息。我知道有桌子,但我想要一個「通用」的方式來做到這一點。 – LppEdd

+0

CVTHC。這可能是答案嗎? – LppEdd

回答

2

我想你可能做它使用「按位」操作,但它可能是一個可怕的一團糟的代碼以及完全沒有必要,因爲ILE RPG可以使用適當的內置函數輕鬆完成。

首先,你不完全有什麼通常被認爲是「十六進制」值。也就是說,你正在顯示一個值的十六進制表示;但基本的「十六進制」轉換不會給出有用的結果。你顯示的內容似乎是「xxx」的UCS-2值。

下面是一個簡單的例子示出的是十六進制字符串轉換成標準字符值:

d     ds 
d charField      6 inz(x'007800780078') 
d UCSField1      3c overlay(charField) 

d TargetField  s    6 
d Length   s    10i 0 

    /free 
    Length = %len(%trim(UCSField1)); 
    TargetField = %trim(%char(UCSField1)); 

    *inlr = *on; 
    return; 
    /end-free 

的代碼有一個DS,其包括兩個子字段。第一個是一個簡單的字符字段,用於聲明初始化爲x'007800780078'的六個字節的內存。第二個子字段被聲明爲數據類型'C'以指示UCS-2,並且它覆蓋第一個子字段。因爲它是UCS-2,所以其大小爲「3」,以允許三個字符。 (每個字符都是16位寬。)

可執行語句不會做太多,只是足以讓您測試轉換後的值。使用調試,你應該看到長度出來是(3)和TargetField變成'xxx'。

%CHAR()內置函數可用於將UCS-2轉換爲程序使用的字符編碼。要走相反的方向,使用%UCS2()內置函數。