java 如何将EBCDIC码转成Ascii码字符!!!急,谢谢!!!!!

xiaotaol1978 2006-06-22 04:49:38
我需要将一个EBCDIC码二进制文件内容转成Ascii码字符写到另外一个文本文件里
我写了个c
// testasctobin.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#ifndef A2E__H

#define A2E__H

unsigned 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;
}

...全文
430 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaotaol1978 2006-06-22
  • 打赏
  • 举报
回复
我转成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);
}

}
}
但转出来的结果字符及数字可以出来,中文就乱了
哪位大虾能帮助一下,如果能有例子那就最好了,千万拜托了,谢谢!!!!
SweetScape 010 Editor 8 汉化版软件特色: 1、 具有标准的 剪贴/复制/粘贴 功能,易于使用。 2、 支持二进制模板,使得分析和编辑二进制文件更加容易。 3、 强大的 DynaBin 数据引擎,使您能够立即打开/复制/粘贴巨型文件(大多数情况下)。 4、 更容易载入超过 4GB 大的文件(如果文件系统支持的话)。 5、 所有十六进制编辑操作支持无限制的 撤销/重做 操作。 6、 〔工作区〕保存了所有目前打开、最近打开和收藏的文件,并包含一个文件浏览器。 7、 大多数的数据类型都具有完整的 查找/替换 功能。 8、 〔查看工具〕能够使您方便的编辑不同格式的数据。 9、 强大的二进制比较功能,并能以柱状图的形式显示比较结果。 10、能够进行包括CRC-16, CRC-32, Adler32, MD2, MD4, MD5, RIPEMD160, SHA-1, SHA-256和 TIGER 在内的较验和或散列计算。 11、集成了一个使用类 C 语法的表达式计算器。 12、能够保存多个界面,每个界面内分别包含超过90个独立的自定义功能。 13、在文件中可以使用书签来标记重要字节。 14、处理数据时支持超过20个数学操作。 15、文件中能够通过不同颜色高亮显示来区分不同类型的字节。 16、同一文件支持多视图。 17、能够以十六进制、十进制、八进制、二进制和字符形式进行编辑。 18、可以通过〔跳转〕功能来跳转到文件的任意位置。 19、能够在 ASCII 和 EBCDIC 之间进行转换。 20、能够以 十六进制文本、 C/C++ 代Java、Intel 十六进制格式 (8, 16, 或 32 位版本)、或 Motorola S-Records (3 种类型)形式导入或导出数据。 21、打印操作支持完整的打印预览、页眉、页脚和页边距的设置功能。 22、带提示的完全文档编制功能。 SweetScape 010 Editor 8.0 中文版是一款专业的文本编辑器和十六进制编辑器,其设计旨在轻松简便地快速编辑您计算机上任何文件的内容。010 Editor 可以编辑简单的文本文件,例如 Unicode 文件、批处理文件、C/C++ 源代等,不过 010 Editor 最擅长编辑二进制文件。二进制文件是指那些可由计算机 读取,而无法被人读取的文件(如果在文本编辑器中打开二进制文件,其中的内容将以垃圾字符显示)。十六进制编辑器是一种允许您查看和编辑二进制文件中个别 字节的程序,而高级的十六进制编辑器(包括 010 Editor)还允许您编辑硬盘驱动器、软盘驱动器、内存密钥、闪存驱动器、光驱和进程中的字节。 SweetScape 010 Editor 8.0 中文版具有标准的剪贴、复制、剪贴功能,易于使用,支持二进制模板,使得分析和编辑二进制文件更加容易。010 Editor 强大的 DynaBin 数据引擎,使你能够立即打开、复制和黏贴巨型文件,而且载入超过4GB 大小的文件也很轻松。所有的十六进制编辑操作支持无限制的撤销、重做操作。 在 010 Editor 的工作区中,保存了所有目前打开、最近打开和收藏的文件,并包含一个文件浏览器。大多数的数据类型都具有完整的查找、替换功能。软件的查看工具能够使你方便地编辑不同格式的数据。软件还具有强大的二进制比较功能,并能以柱状图的形式显示比较结果。能够进行包括 CRC-16、CRC-32、Adler32、MD2、MD4、MD5、RIPEMD160、SHA-1、SHA-256和 TIGER 在内的较验和或散列计算。 转载声明: 声明:大眼仔旭 | 本文采用[BY-NC-SA]协议进行授权 文章名称:《专业文本/十六进制编辑器 010 Editor 8.0.1 + x64 中文汉化免费版》 文章固定链接:http://www.dayanzai.me/010-editor.html 除注明转载文章外 转载时必须以链接形式注明作者和原始出处及本声明

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧