admin 管理员组文章数量: 887021
2024年1月4日发(作者:羊了个羊急招后端开发)
关于EBCDIC码与ASCII码相互转换
我介绍的方法很巧妙,在网上可以找到C,C++,VB等语言写的代码,还么发现C#语言写的,方法几乎差不多。因为做毕业设计,读取SEGY文件的卷头部分的信息和数据,要把SEGY码转化成ASCII,开始不知道具体方法,看着两种编码,实在找不到一种好的转换方法。在网上找了一些代码参考,看到一个用C++
写的经典方法,在微软帮助里面找到的。之后也参考了用C,VB写的,看了半天没弄明白,用VS2008跟踪调试后 ,终于弄出了一段代码,解决次问题。
一、 把EBCDIC转换为ASCII代码:
public class ChString
{
const string C_EBCDIC2ASCII =
"000102039C09867F978D8E0B0C0D0E0F101112139D85F1C1D1E1F" +
"2A171B88898A8B8C939495960498999A9B14159E1A" +
"20A0A1A2A3A4A5A6A7A8D52E3C282B7C26A9AAABACADAEAFB0B121242A293B5E"+
"2D2FB2B3B4B5B6B7B8B9E52C255F3E3FBABBBCBDBEBFC0C1C2603A2340273D22" +
"C36676869C4C5C6C7C8C9CA6A6B6C6D6E6F707172CBCCCDCECFD0" +
"D17E737475767778797AD2D3D45BD6D7D8D9DADBDCDDDEDFE0E1E2E3E45DE6E7"+
"7B4474849E8E9EAEBECED7D4A4B4C4D4E4F505152EEEFF0F1F2F3" +
"5C9F535455565758595AF4F5F6F7F8F936373839FAFBFCFDFEFF";
public static string EBCDIC2ASCII(int ebcdic)
{
string s = C_ing(ebcdic * 2, 2);
char c = (16(s, 16));
if (c >= ' ')
return ng();
else
return "";
}
}
解析:上面定义的字符串C_EBCDIC2ASCII的长度为512,每两个字符(下标为2*n,2*n+1)表示一个16进制的数,用方法Substring(ebcdic * 2, 2)提取这两个字符,并转化为
Int16类型的十进制,再转化为ASCII对应的Char类型数据。
巧妙之处在于: 假设整数n(0~255)为EBCDIC对应的值,在下标为2*n,2*n+1的两个字符用来表示16进制的两个位(分别为高位,低位),而这个16进制正好为EBCDIC对应的字符的16进制表示(EBCDIC数据还是按ASCII码读取)。
FileStream fs = (filePath, , , );
BinaryReader br = new BinaryReader(fs, );
(0, );
string sLine += 2ASCII(ebcdic);
二、 把ASCII转换为EBCDIC:
同上类似:
const string C_ASCII2EBCDIC =
"D2E2F1605250B0C0D0E0F101112133C3D322618193F271C1D1E1F" +
"405A7F7B5B6C507D4D5D5C4E6B604B61F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F" +
"7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E3E4E5E6E7E8E9ADE0BD5F6D" +
"7988788899979899A2A3A4A5A6A7A8A9C04FD0A107" +
"261728292A2B2C090A1B30311A333435360838393A3B04143EE1" +
"4474849557585962636465666768697" +
"767778808A8B8C8D8E8F909A9B9C9D9E9FA0AAABAC4AAEAFB0B1B2B3B4B5B6B7" +
"B8B9BABBBC6ABEBFCACBCCCDCECFDADBDCDDDEDFEAEBECEDEEEFFAFBFCFDFEFF";
public static string ASCII2EBCDIC(int ascii)
{
string s = C_ing(ascii * 2, 2);
char c = (16(s, 16));
return ng();
}
版权声明:本文标题:关于EBCDIC码与ASCII码相互转换 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1704306854h454035.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论