我需要将一个二进制文件内容转成Ascii码字符写到另外一个文本文件里
我写了个c
// testasctobin.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include <stdio.h>
#ifndef A2E__H#define A2E__Hunsigned char ASCIItoEBCDIC(const unsigned char c);/* A2E.C */unsigned char EBCDICtoASCII(const unsigned char c);/* A2E.C */extern int ascii2ebcdic[256]; /* Toascii.C */extern int ebcdic2ascii[256]; /* Toascii.C */#endif /* A2E__H */
    static unsigned char a2e[256] = {    0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 37, 11, 12, 13, 14, 15,    16, 17, 18, 19, 60, 61, 50, 38, 24, 25, 63, 39, 28, 29, 30, 31,    64, 79,127,123, 91,108, 80,125, 77, 93, 92, 78,107, 96, 75, 97,    240,241,242,243,244,245,246,247,248,249,122, 94, 76,126,110,111,    124,193,194,195,196,197,198,199,200,201,209,210,211,212,213,214,    215,216,217,226,227,228,229,230,231,232,233, 74,224, 90, 95,109,    121,129,130,131,132,133,134,135,136,137,145,146,147,148,149,150,    151,152,153,162,163,164,165,166,167,168,169,192,106,208,161, 7,    32, 33, 34, 35, 36, 21, 6, 23, 40, 41, 42, 43, 44, 9, 10, 27,    48, 49, 26, 51, 52, 53, 54, 8, 56, 57, 58, 59, 4, 20, 62,225,    65, 66, 67, 68, 69, 70, 71, 72, 73, 81, 82, 83, 84, 85, 86, 87,    88, 89, 98, 99,100,101,102,103,104,105,112,113,114,115,116,117,    118,119,120,128,138,139,140,141,142,143,144,154,155,156,157,158,    159,160,170,171,172,173,174,175,176,177,178,179,180,181,182,183,    184,185,186,187,188,189,190,191,202,203,204,205,206,207,218,219,    220,221,222,223,234,235,236,237,238,239,250,251,252,253,254,255};    static unsigned char e2a[256] = {    0, 1, 2, 3,156, 9,134,127,151,141,142, 11, 12, 13, 14, 15,    16, 17, 18, 19,157,133, 8,135, 24, 25,146,143, 28, 29, 30, 31,    128,129,130,131,132, 10, 23, 27,136,137,138,139,140, 5, 6, 7,    144,145, 22,147,148,149,150, 4,152,153,154,155, 20, 21,158, 26,    32,160,161,162,163,164,165,166,167,168, 91, 46, 60, 40, 43, 33,    38,169,170,171,172,173,174,175,176,177, 93, 36, 42, 41, 59, 94,    45, 47,178,179,180,181,182,183,184,185,124, 44, 37, 95, 62, 63,    186,187,188,189,190,191,192,193,194, 96, 58, 35, 64, 39, 61, 34,    195, 97, 98, 99,100,101,102,103,104,105,196,197,198,199,200,201,    202,106,107,108,109,110,111,112,113,114,203,204,205,206,207,208,    209,126,115,116,117,118,119,120,121,122,210,211,212,213,214,215,    216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,    123, 65, 66, 67, 68, 69, 70, 71, 72, 73,232,233,234,235,236,237,    125, 74, 75, 76, 77, 78, 79, 80, 81, 82,238,239,240,241,242,243,    92,159, 83, 84, 85, 86, 87, 88, 89, 90,244,245,246,247,248,249,    48, 49, 50, 51, 52, 53, 54, 55, 56, 57,250,251,252,253,254,255};unsigned char ASCIItoEBCDIC(const unsigned char c)
    {    return a2e[c];}unsigned char EBCDICtoASCII(const unsigned char c)    {    return e2a[c];}int main(int argc, char* argv[])
{
FILE *fp,*fp1;
//char ch;
unsigned char getbuffer[20];
unsigned char ascch[20];
fp = fopen("c:\\databin","rb");
if(fp != NULL)
{
fp1 = fopen("c:\\ascdata.txt","w");
while (fread(getbuffer,1,1,fp)!=0)
{
ascch[0] = EBCDICtoASCII(getbuffer[0]);
fwrite(ascch,1,1,fp1);
//fputc(ascch,fp1);
//printf((char *)ascch);
}
fclose(fp1);
}
fclose(fp);
return 0;
}

解决方案 »

  1.   

    我转成java后如下
    package filewrite;import java.io.*;public class bintoasc {
      public bintoasc() {
      }  private static char[] a2e = {      0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 37, 11, 12, 13, 14, 15,      16, 17, 18, 19, 60, 61, 50, 38, 24, 25, 63, 39, 28, 29, 30, 31,      64, 79, 127, 123, 91, 108, 80, 125, 77, 93, 92, 78, 107, 96, 75, 97,      240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 122, 94, 76, 126, 110,
          111,      124, 193, 194, 195, 196, 197, 198, 199, 200, 201, 209, 210, 211, 212, 213,
          214,      215, 216, 217, 226, 227, 228, 229, 230, 231, 232, 233, 74, 224, 90, 95,
          109,      121, 129, 130, 131, 132, 133, 134, 135, 136, 137, 145, 146, 147, 148, 149,
          150,      151, 152, 153, 162, 163, 164, 165, 166, 167, 168, 169, 192, 106, 208, 161,
          7,      32, 33, 34, 35, 36, 21, 6, 23, 40, 41, 42, 43, 44, 9, 10, 27,      48, 49, 26, 51, 52, 53, 54, 8, 56, 57, 58, 59, 4, 20, 62, 225,      65, 66, 67, 68, 69, 70, 71, 72, 73, 81, 82, 83, 84, 85, 86, 87,      88, 89, 98, 99, 100, 101, 102, 103, 104, 105, 112, 113, 114, 115, 116,
          117,      118, 119, 120, 128, 138, 139, 140, 141, 142, 143, 144, 154, 155, 156, 157,
          158,      159, 160, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
          183,      184, 185, 186, 187, 188, 189, 190, 191, 202, 203, 204, 205, 206, 207, 218,
          219,      220, 221, 222, 223, 234, 235, 236, 237, 238, 239, 250, 251, 252, 253, 254,
          255  };
      private static char[] e2a = {      0, 1, 2, 3, 156, 9, 134, 127, 151, 141, 142, 11, 12, 13, 14, 15,      16, 17, 18, 19, 157, 133, 8, 135, 24, 25, 146, 143, 28, 29, 30, 31,      128, 129, 130, 131, 132, 10, 23, 27, 136, 137, 138, 139, 140, 5, 6, 7,      144, 145, 22, 147, 148, 149, 150, 4, 152, 153, 154, 155, 20, 21, 158, 26,      32, 160, 161, 162, 163, 164, 165, 166, 167, 168, 91, 46, 60, 40, 43, 33,      38, 169, 170, 171, 172, 173, 174, 175, 176, 177, 93, 36, 42, 41, 59, 94,      45, 47, 178, 179, 180, 181, 182, 183, 184, 185, 124, 44, 37, 95, 62, 63,      186, 187, 188, 189, 190, 191, 192, 193, 194, 96, 58, 35, 64, 39, 61, 34,      195, 97, 98, 99, 100, 101, 102, 103, 104, 105, 196, 197, 198, 199, 200,
          201,      202, 106, 107, 108, 109, 110, 111, 112, 113, 114, 203, 204, 205, 206, 207,
          208,      209, 126, 115, 116, 117, 118, 119, 120, 121, 122, 210, 211, 212, 213, 214,
          215,      216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
          231,      123, 65, 66, 67, 68, 69, 70, 71, 72, 73, 232, 233, 234, 235, 236, 237,      125, 74, 75, 76, 77, 78, 79, 80, 81, 82, 238, 239, 240, 241, 242, 243,      92, 159, 83, 84, 85, 86, 87, 88, 89, 90, 244, 245, 246, 247, 248, 249,      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 250, 251, 252, 253, 254, 255  };  public char ASCIItoEBCDIC(int c) {    return a2e[c];  }  public static char EBCDICtoASCII(int c) {    return e2a[c];  }  public static void main(String[] args) {    bintoasc bintoasc = new bintoasc();
        DataInputStream in = null;
        DataOutputStream outp = null;
        char[] tmpchar = new char[1024];
        boolean cont = true;
        try
        {
           in = new DataInputStream(new FileInputStream("c:/databin"));
           outp = new DataOutputStream(new FileOutputStream("c:/ascdata.txt"));      //in.readChar();
        }
        catch(IOException e)
        {
        }
        while (cont) {
          try {
            //int n = in.read(); // 从文件读取数据
            byte n= in.readByte();
            //System.out.write(buff, 0, n); // 写入System.out中
            Byte b = new Byte(n);
            int tmp_i = b.intValue();
            int tmp = 0;
            if(tmp_i<0)
            {
              tmp = tmp_i + 256;
            }
            else
            {
              tmp = tmp_i;
            }
            //Integer tmp_i = new Integer(tmp);        char outasc = EBCDICtoASCII(tmp);        //Byte bytasc = new Byte(outasc);
            outp.writeByte(outasc);
            //System.out.println(outasc);
          }
          catch (Exception e) {
            //e.printStackTrace();
            cont = false;
          }
        }    try {
          in.close();
          outp.close();
        }
        catch (IOException e) {
          System.err.println("文件错误");
          System.exit(1);
        }  }
    }
    但转出来的结果里有一些奇怪的东西乱的汉字
    不知道是否正确,哪位大虾能帮助一下,如果能有例子那就最好了,千万拜托了,谢谢!!!!