首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将EBCDIC字符转换为十六进制值(AFP EBCDIC数据)

将EBCDIC字符转换为十六进制值(AFP EBCDIC数据)
EN

Stack Overflow用户
提问于 2009-04-13 16:35:15
回答 3查看 5.6K关注 0票数 1

我使用一些EBCDIC数据,我需要解析这些数据并找到一些十六进制值。我遇到的问题是,我似乎正在使用不正确的编码读取文件。我可以看到我的记录以"!“(这是EBCDIC中的x5A )开头,但是当进行十六进制转换时,它返回一个x21,这是"!”的ASCII值。

我希望框架中有一个内置的方法,但我担心我必须创建一个自定义类来正确地映射EBCDIC字符集。

代码语言:javascript
复制
Using fileInStream As New FileStream(inputFile, FileMode.Open, FileAccess.Read)
   Using bufferedInStream As New BufferedStream(fileInStream)
      Using reader As New StreamReader(bufferedInStream, Encoding.GetEncoding(37))
         While Not reader.EndOfStream
            Do While reader.Peek() >= 0
               Dim charArray(52) As Char
               reader.Read(charArray, 0, charArray.Length)

               For Each letter As Char In charArray
                  Dim value As Integer = Convert.ToInt16(letter)

                  Dim hexOut As String = [String].Format("{0:x}", value)
                  Debug.WriteLine(hexOut)
               Next
            Loop
         End While
      End Using
   End Using
End Using

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-13 16:59:25

是的,当您将文本数据作为字符串读取时,它会在内部将其存储为Unicode。如果你关心二进制值(即原始字节),那么不要一开始就对它进行解码。

如果你真的需要使用自定义的EBCDIC编码做任何事情,你可以使用我的open source EBCDIC implementation -但我认为你真的只需要决定你是把它当作二进制数据还是文本。

票数 3
EN

Stack Overflow用户

发布于 2009-04-14 14:30:47

你可以这样做:

  1. 打开AFP文件。读取前9个字节。
  2. 字节0应为0xD3或0x5A。字节1和字节2将是SFI的长度,包括您刚刚读取的9个字节中的8个。它是高字节顺序,因此长度= 256+byte2.
  3. Bytes * byte1 3、4和5是结构化字段标识符。如果要查找可打印文本,请查找PTX,(演示文稿文本元素) 0xD3 0xEE 0x9B。如果你没有找到,跳过前面的length-8并读取接下来的9个字节。
  4. 如果你找到了PTX,读取length-8个字节。解析控制序列以获得文本有点棘手。第一个以0x2b 0xD3开头,字节表示长度,字节表示控制序列的类型。如果该字节为奇数,则下一个控制序列将省略0x2B 0xD3报头,改为从长度字节开始。这被称为“链接”,显然是为了让程序员疯狂地解析这些东西。
  5. 跳过字节长度-1的长度,继续或者只是寻找下一个0x2B 0xD3;最后一个控制序列将不会被链接,并且跟随到PTX结束的所有内容都将是EBCDIC。使用Jon Skeet的库(谢谢,Jon)并查找下一个PTX元素。

抱歉,我长篇大论了。这是可行的,但并不简单。

票数 4
EN

Stack Overflow用户

发布于 2009-04-13 20:21:48

以这种方式读取法新社数据时要小心。它在字节和位顺序上都是大端的。如果您将其视为二进制数据,例如解析文档中的结构化字段,则需要考虑到这一点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/744486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档