字符的位置,我正在尋找一種方式來ASCII文本轉換爲十六進制數據,我的意思是十六進制的方式,你可以得到製作獲取整理順序
MOVE X'nn' TO MYVAR.
然後,我需要使用它像一個號碼(COMP-3我猜)。
,我打算給PIC(X)移動到PIC S9(2)V COMP-3,但我認爲不工作...
進一步解釋,因爲我的問題被標記爲不明確:
首先,對不起,我在深夜做了這個問題,現在又讀了,是的,目前還不清楚。
現在,真正的問題是,我想用一個char(假設「A」),因爲它是十六進制數字,表示將它作爲一個內部表中的索引。
例如,在C中,它可以很容易,使得:
int mynum;
char mytext;
mynum = atoi(mytext);
然後使用mychar
訪問陣列。所以,在COBOL我:
01 MY-TABLE.
05 MY-TABLE-ITEM PIC X OCCURS 1000.
01 MY-TEXT PIC X 100.
01 MY-TEXT-X PIC X OCCURS 100.
然後,我要重複MY-TEXT-X
並將其轉換成它的十六進制代碼,將其存儲到一個數字變量(PIC 9(n))的使用它來訪問MY-TABLE-ITEM
,東西像:
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 100
PERFORM TRANSFORM-DATA
DISPLAY MY-TABLE-ITEM(MY-NUMBER)
END-PERFORM
正如我所說的,我以爲我可以移動PIC X
到PIC S9(2)V COMP-3
所以數字變量可以得到價值,但它不工作如我所料...
編輯:
於是我就發現我的編譯器不支持的內在功能,這樣就不會幫我...
編輯 - 添加源代碼
所以,這裏是我使用的來源,也顯示來自編譯器和執行。
來源:
IDENTIFICATION DIVISION.
PROGRAM-ID. likeatoi.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 the-char PIC X
VALUE "K".
01 the-result PIC 999.
01 the-other-result PACKED-DECIMAL PIC 9(8)
VALUE ZERO.
01 FILLER
REDEFINES the-other-result.
05 FILLER PIC X.
05 char-to-convert PIC X.
01 num pic 9(8).
PROCEDURE DIVISION.
MAINLINE.
* with instrinsic function
* MOVE FUNCTION ORD (the-char)
* TO the-result.
DISPLAY
">"
the-char
"<"
">"
the-result
"<".
* Old School
MOVE the-char TO char-to-convert.
DISPLAY
">"
the-char
"<"
">"
the-other-result
"<".
MOVE the-other-result TO num.
DISPLAY num.
STOP RUN.
現在,這裏所有的細節我想:
首先,嘗試編譯它機智固有功能ORD:
***** 1) 0384: E User-defined word expected instead of reserved word. (scan su
使用此編譯,運行程序(忽略錯誤):
COBOL procedure error 211 at line 17 in ./ESCRITORIO/HEX/LIKEATOI.COB (/home/dohitb/Escritorio/HEX/likeatoi.COB) compiled 17/03/05 20:37:29.
- 註釋功能部分,然後再次編譯:
(與補償變量無 「數」,仍然)再次執行:
>A<> <
>A<>A<
添加 「NUM」 變量,改變字符爲 「K」,並改變COMP到PACKED- DECIMAL(在HEX:4B)
>K<> <
>K<>K<
04900000
Errors: 0, Warnings: 1, Lines: 37 for program LIKEATOI.
(警告用於顯示COMP變量,它的行)
所以,我告訴,無論是選擇正常工作。現在最精確的方法是使用PACKED-DECIMAL重新定義PIC 9,但HEX位置高於「A」時,它會給出「9」,所以它仍然無效。
我認爲這可能是本地COLLATION的問題。
最後編輯
現在我所做的原始源代碼的變體:
IDENTIFICATION DIVISION.
PROGRAM-ID. likeatoi.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 the-char PIC X
VALUE "K".
01 the-result PIC 999.
01 the-other-result BINARY PIC 9(4)
VALUE ZERO.
01 FILLER-1
REDEFINES the-other-result.
05 FILLER PIC X.
05 char-to-convert PIC X.
01 the-comp-result COMP PIC 9(4)
VALUE ZERO.
01 FILLER-2
REDEFINES the-comp-result.
05 FILLER PIC X.
05 char-to-convert PIC X.
01 the-packed-result PACKED-DECIMAL PIC 9(4)
VALUE ZERO.
01 FILLER-3
REDEFINES the-packed-result.
05 FILLER PIC X.
05 char-to-convert PIC X.
01 num PIC 9(8).
01 alfa PIC X(20)
VALUE 'ABCDEFGHIJabcdefghij'.
01 FILLER REDEFINES alfa.
05 char PIC X OCCURS 20.
01 w-index PIC 99 VALUE ZEROES.
PROCEDURE DIVISION.
MAINLINE.
PERFORM VARYING w-index FROM 1 BY 1 UNTIL w-index > 20
MOVE char(w-index) TO the-char
* Variations of "Old School" code
MOVE the-char TO char-to-convert OF FILLER-1
MOVE the-char TO char-to-convert OF FILLER-2
MOVE the-char TO char-to-convert OF FILLER-3
DISPLAY
">"
the-char
"<"
" with BINARY >"
the-other-result
"<"
MOVE the-other-result TO num
DISPLAY "Numeric value: " num
DISPLAY
">"
the-char
"<"
" with COMP >"
the-comp-result
"<"
MOVE the-comp-result TO num
DISPLAY "Numeric value: " num
DISPLAY
">"
the-char
"<"
" with PACKED >"
the-packed-result
"<"
MOVE the-packed-result TO num
DISPLAY "Numeric value: " num
END-PERFORM.
STOP RUN.
而且,對於我吃驚的是,它給我這個輸出
>A< with BINARY >A<
Numeric value: 00000065
>A< with COMP >A<
Numeric value: 00000100
(等...)所以現在看起來像是在工作......可能是因爲我第一次嘗試使用05-LEVEL變量?
看起來像現在完成了!
感謝所有,比爾,你的身影在我的項目:)
的問候段最後一個細節。
如果我做一個「MOVE」
MOVE 'A' TO CHAR
然後做所有二進制的東西,結果是不同的......這裏的例子。
與VALUE
,對於「d」我得到的68,但MOVE
我得到60 ...
你將需要更清楚。 HEX只是一個符號,通常用於描述ASCII字符的位模式。所以......你能提供一些你想要的東西的例子嗎? –
你添加到你的問題的標籤應該是相關的。每個標籤都有一個描述。如果描述不符合將搜索引擎提供給您的問題的某些有用內容,則只會讓人們抱怨使用該標籤。他們不是「主題標籤」。 –
查看COBOL的文檔。在內在函數中,你可能會發現你需要的東西。但這是一個猜測。 –