2014-04-10 22 views
0

我需要編寫一個C程序來將緩衝區中的壓縮十進制字段轉換爲整數值。壓縮十進制的精度是9,Scale是0.什麼是在IBM大型機C progrram中轉換它的最好方法?在Cobol中,使用Packed Decimal的格式是Comp-3 任何幫助都會被折扣。在C程序中將壓縮十進制字符數組轉換爲整數

+0

有很多有關樣Comp-3的問題。但在Comp-3中,123代表'123c',-123代表'123d'。有兩種方法 - 轉換爲字符串,然後轉換爲數字(請參閱http://stackoverflow.com/questions/4337912/how-to-convert-unpacked-decimal-back-to-comp-3)或訪問nybles(請參閱http://stackoverflow.com/questions/142972/c-convert-comp-3-packed-decimal-to-human-readable-value) –

回答

0

如果您在Zos主機上運行該程序,那麼C編譯器本機支持壓縮十進制。

谷歌爲「ZOSÇ定點小數類型」應該讓你在正確的手冊頁 它的一個簡單的:

#include <decimal.h> 
decimal(9,0) mynum; 
+0

感謝您的迴應。但我認爲它不會解決問題。我有一個緩衝區作爲char *需要轉換爲十進制(9,0),而我不知道是否不能這樣做:decimal(9,0)mynum = charBuffer;或十進制(9,0)mynum =(十進制(9,0))charBuffer; –

0
The one way I think it can be done, is 
long long MyGetPackedDecimalValue(char* pdIn, int length) 
{ 
    // Convert packed decimal to long 
    const int PlusSign = 0x0C;  // Plus sign 
    const int MinusSign = 0x0D;  // Minus `enter code here` 
    const int NoSign = 0x0F;   // Unsigned 
    const int DropHO = 0xFF;   // AND mask to drop HO sign bits 
    const int GetLO = 0x0F;   // Get only LO digit 
    long long val = 0;     // Value to return  

    printf ("in side ****GetPDVal \n "); 
    for(int i=0; i < length; i++) 
    { 
     int aByte = pdIn[i] & DropHO; // Get next 2 digits & drop sign bits 
     if(i == length - 1) 
     { // last digit? 
     int digit = aByte >> 4; // First get digit 
     val = val*10 + digit; 
      printf("digit= %d, val= %lld \n", 
       digit, 
       val); 
     int sign = aByte & GetLO; // now get sign 
     if (sign == MinusSign) 
      { 
      val = -val; 
      } 
     else 
      { 
      // Do we care if there is an invalid sign? 
      if(sign != PlusSign && sign != NoSign) 
       perror("SSN:Invalid Sign nibble in Packed Decimal\n"); 
     } 
     } 
     else 
     { 
     int digit = aByte >> 4; // HO first  
     val = val*10 + digit; 
      printf("digit= %d, val= %lld \n", 
       digit, 
       val); 
      digit = aByte & GetLO;  // now LO 
     val = val*10 + digit; 
      printf("digit= %d, val= %lld \n", 
       digit, 
       val); 
     } 
    }`enter code here` 
    printf ("**** coming out GetPDVal \n "); 
    return val; 
} 
相關問題