2016-11-14 2 views
-2

Sagen wir, ich habe diesen Wert xxx in hex 007800780078
Wie kann ich den Hex-Wert zurück in Zeichen mit bitweisen Operationen konvertieren? Kann ich?Konvertieren HEX in Zeichen mit bitweisen Operationen

+0

Google ist dein Freund. – Charles

+0

Hallo @Charles, ich weiß (und fand), wie Hex-Zahlen konvertiert werden, konnte aber nichts über Strings finden. Ich weiß, dass es Tische gibt, aber ich hätte gerne eine "universelle" Art und Weise, dies zu tun. – LppEdd

+0

CVTHC. Könnte es die Antwort sein? – LppEdd

Antwort

2

Ich nehme an, Sie könnte tun es mit "bitweisen" Operationen, aber es wäre wahrscheinlich eine schreckliche Durcheinander von Code sowie völlig unnötig, da ILE RPG kann es einfach mit geeigneten integrierten Funktionen tun.

Zuerst ist, dass Sie nicht genau das haben, was normalerweise als "hex" Wert betrachtet wird. Das heißt, Sie zeigen eine hexadezimale Darstellung eines Wertes an. aber die grundlegende "Hex" -Konvertierung wird kein nützliches Ergebnis liefern. Was Sie zeigen scheint ein UCS-2-Wert für "xxx" zu sein.

Hier ist ein einfaches Beispiel, das eine Umwandlung dieser Hexadezimalstring in einen Standard-Zeichenwert zeigt:

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 

Der Code hat einen DS, der zwei Teilfelder enthält. Der erste ist ein einfaches Zeichenfeld, das sechs Bytes Speicher initialisiert, die auf x'007800780078 initialisiert sind. Das zweite Teilfeld wird als Datentyp 'C' deklariert, um UCS-2 anzuzeigen, und es überlagert das erste Teilfeld. Da es UCS-2 ist, wird seine Größe als "3" angegeben, um drei Zeichen zu ermöglichen. (Jedes Zeichen ist 16 Bit breit.)

Die ausführbaren Anweisungen reichen nicht aus, nur um die konvertierten Werte zu testen. Wenn Sie debuggen, sollten Sie sehen, dass Length (3) und TargetField "xxx" ist.

Die eingebaute Funktion% CHAR() kann zur Konvertierung von UCS-2 in die vom Programm verwendete Zeichencodierung verwendet werden. Um in die entgegengesetzte Richtung zu gehen, verwenden Sie die integrierte Funktion% UCS2().