首页 新闻 会员 周边 捐助

报文解析 char[]类型(16进制)转换成二进制

0
[已解决问题] 解决于 2014-07-21 13:39

请教大神!!报文解析怎样将char数组类型的里面值(16进制)转换成2进制,我试了好几次。乱码啊。开发工具是VS2010,控制台应用程序。不清楚的话我可以截图,各位大牛。今天下班之前要交。谢谢!!

携着你去看海的主页 携着你去看海 | 初学一级 | 园豆:81
提问于:2014-07-18 14:22
< >
分享
最佳答案
0

截图,贴代码。

奖励园豆:5
Launcher | 高人七级 |园豆:45050 | 2014-07-18 14:23

@携着你去看海: 不能,你贴代码吧

Launcher | 园豆:45050 (高人七级) | 2014-07-18 14:38

@Launcher: 

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace MySecondMainTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string line;
            try        
            {
                StreamReader sr = new StreamReader("E:/ExampleBaowen.txt");
                line=sr.ReadLine();
                string [] temp = line.Split(' ');
                while (line != null) 
                {
                    Console.WriteLine(line);
                    line = sr.ReadLine();
                }
                string str=null;
                foreach (var x in temp) 
                {
                    str += x;
                }
                Console.WriteLine(str);
                char[] tempFour = str.Substring(26, 8).ToCharArray();
                string s = new string(tempFour);
                byte[] data = Encoding.Unicode.GetBytes(s);
                string strT = str.Substring(14, 2);
                //可以不用看下面判断的内容
                if (strT != null)
                {
                    if (strT == "61")
                    {
                        Console.WriteLine(" 该报文的帧类型是重要遥测");
                    }
                    else if (strT == "C2")
                    {
                        Console.WriteLine(" 该报文的帧类型是次要遥测");
                    }
                    else if (strT == "F4")
                    {
                        Console.WriteLine(" 该报文的帧类型是正常遥信");
                    }
                    else
                    {
                        Console.WriteLine(" 数据异常");
                    }
                    //字符串转变成二进制
                    StringBuilder result = new StringBuilder(data.Length*8);
                    foreach(char b in data)
                    {
                        result.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
                        Console.WriteLine(result);
                    }
                }
                //字符串类型转变为字
                sr.Close();
                Console.ReadLine();          
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: " + e.Message);
            }
            finally
            {
                Console.WriteLine("Executing finally block.");
            }
        }
    }
}
携着你去看海 | 园豆:81 (初学一级) | 2014-07-18 14:43

@携着你去看海: 

StreamReader sr = new StreamReader("E:/ExampleBaowen.txt"); // 这里的 .txt 文件是啥编码?

Launcher | 园豆:45050 (高人七级) | 2014-07-18 14:47

@Launcher: 放在E盘的文本文档。内容EB 90 EB 90 EB 90     71 61 01 01 02 60      02 AB 73 6F 08 06   。我需要去最后一组AB 73 6F 08,转换成二进制控制台输出。。。

携着你去看海 | 园豆:81 (初学一级) | 2014-07-18 14:49

@携着你去看海: 什么编码? 是 GB2312 UTF-8 UNICODE ?

Launcher | 园豆:45050 (高人七级) | 2014-07-18 14:51

@Launcher: 就是3组数据啊,是文档里面写的随机报文。我可以随便写的02 05 42 65 69 99 每组有六个,分为三组。早上我能够去除单个的A  B   7   3   6   F   0   8.下午转换的时候就乱码

携着你去看海 | 园豆:81 (初学一级) | 2014-07-18 14:54

@携着你去看海: 对比下面两条语句的结果:

byte[] data = Encoding.Unicode.GetBytes("2");

byte[] data = Encoding.UTF8.GetBytes("2");

Launcher | 园豆:45050 (高人七级) | 2014-07-18 14:57

@Launcher: 没什么区别,一样的。给你看下显示的效果

01000001

01000001 01000010

01000001 01000010 00110111

01000001 01000010 00110111 00110011

01000001 01000010 00110111 00110011 00110110

01000001 01000010 00110111 00110011 00110110 00110000

01000001 01000010 00110111 00110011 00110110 00110000 00111000

还有就是同一行之间每空格,我是为了方便看才留下来的

          

携着你去看海 | 园豆:81 (初学一级) | 2014-07-18 15:04

@携着你去看海: 你是睁眼说瞎话!

byte[] data = Encoding.Unicode.GetBytes("2"); // 这里的 data.Length 为 2

byte[] data = Encoding.UTF8.GetBytes("2");  // 这里的 data.Length 为 1.

Launcher | 园豆:45050 (高人七级) | 2014-07-18 15:06

@Launcher: 。。。。。好吧,怪不得每次元素的总数这么大呢,我的错!!- -

携着你去看海 | 园豆:81 (初学一级) | 2014-07-18 15:10

@携着你去看海: 你倒底想做啥?难道是把字符串 "B7" 转换成字符串 "10110111"

Launcher | 园豆:45050 (高人七级) | 2014-07-18 15:25

@Launcher: 嗯嗯,就是这个意思。。。现在我写文档的时候才看到你回我消息,不好意思啊。觉得你挺厉害的,居然能明白我想说的意思。哈哈

携着你去看海 | 园豆:81 (初学一级) | 2014-07-18 17:18

@携着你去看海: 我估计你应该这样转:

string hexValue = "B7";   // 对应十进制数 183

 

 // 先转换成十进制数

byte decValue = Convert.ToByte(hexValue,16); 

 

// 再从十进制数转换为二进制的字符串变现形式

string binValue = Convert.ToString(decValue,2);  // 10110111

Launcher | 园豆:45050 (高人七级) | 2014-07-18 17:47

@Launcher: 用你的方法解决问题了。

                foreach (char item in tempFour)
                {
                    byte decValue = Convert.ToByte(item.ToString(), 16);
                    // 再从十进制数转换为二进制的字符串变现形式
                     binValue = Convert.ToString(decValue, 2).PadLeft(4, '0');  // 10110111
                     Console.WriteLine(binValue);
                }   谢谢!
携着你去看海 | 园豆:81 (初学一级) | 2014-07-21 11:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册