c#小工具,位序批量转换工具,hex到hex。bit order converter,hex to hex

按照用户输入的公式实现 给定数据的各个bit的重映射,输出新数据。

 

下载地址,连同源码包。

http://download.csdn.net/detail/delacroix_xu/3898547

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace dataBitConvert
{
    public partial class BitConverter : Form
    {
        public BitConverter()
        {
            InitializeComponent();
            textBox_bit_remap.Text = "27,26,25,24   ,23,22,21,20    ,19,18,17,16    ,15,14,13,12    ,11,10,9,8    ,7,6,5,4   , 3,2,1,0   ,39,38,37,36    ,35,34,33,32    ,31,30,29,28    ";
            textBox1.Text =
                              "X\"0808000000\" \r\n" +
                              "x\"1408000000\" \r\n" +
                              "x\"0010002240\" \r\n" +
                              "x\"801ffffffc\" \r\n" +
                              "x\"401ffffffc\" \r\n" +
                              "x\"c010002240\" \r\n" +
                              "x\"201ffffffc\" \r\n" +
                              "x\"a01ffffffc\" \r\n" +
                              "x\"6010000000\" \r\n" +
                              "x\"e010000000\" \r\n" +
                              "x\"1010000000\" \r\n" +
                              "x\"9010000040\" \r\n" +
                              "x\"5010000000\" \r\n" +
                              "x\"d010000000\" \r\n" +
                              "x\"30104a1a50\" \r\n" +
                              "x\"b01ffffffc\" \r\n" +
                              "x\"7010002240\" \r\n" +
                              "x\"f01ffffffc\" ";

        }

        private string tag_start_str = "\"";
        private string tag_end_str = "\"";

        private void Convert_Click(object sender, EventArgs e)
        {
            textBox2.Text = "";
            textBox1.Text = textBox1.Text.ToUpper();
            string strsrc = textBox1.Text;
            
            string[] strSrcs1 = new string[100];


            DataBit[] dbit = new DataBit[100];



            int u = 0;
            while (strsrc.IndexOf(tag_start_str) > 0)
            {
                int index_word_start = 0;
                int index_word_end = 0;
                index_word_start = strsrc.IndexOf(tag_start_str) + tag_start_str.Length;
                string strsrc_sub = strsrc.Substring(index_word_start);
                index_word_end = strsrc_sub.IndexOf(tag_end_str);
                string tempNumStr = strsrc.Substring(index_word_start, index_word_end);
                dbit[u] = new DataBit();
                dbit[u].bitChar = tempNumStr.ToCharArray();
                dbit[u].value_src = DataBit.atoihex(dbit[u].bitChar);
                u++;
                strsrc = strsrc_sub.Substring(index_word_end + tag_end_str.Length);
            }



            //convert dec to binary
            for (int i = 0; null != dbit[i]; i++)
                dbit[i].Gen_bit_src();



            
            //convert ... bits remap
            string mapStr = textBox_bit_remap.Text;
            string[] bitPosStr = new String[100];
            bitPosStr = mapStr.Split(',');

            for (int j = 0; null != dbit[j]; j++)
            {
                int indexofmap;
                for (int i = 0; i < bitPosStr.Length; i++)
                {
                    indexofmap = int.Parse(bitPosStr[i]);
                    dbit[j].bit_dst[i] = dbit[j].bit_src[indexofmap];
                }
            }


            //Gen New Data to value_dst
            for (int i = 0; null != dbit[i]; i++)
                dbit[i].Gen_bit_dst();



            for (int i = 0; null != dbit[i]; i++)
                textBox2.Text += "##" + CryptString.ConvertToHexStr(dbit[i].value_dst.ToString()) + "$\r\n";
                

        }

        private void button_help_Click(object sender, EventArgs e)
        {
            string str = "上面的输入框,是指的转换公式,意思是\nbit0对应bit27\nbit1对应bit26\n" +
                        "...\n...\n以此类推\n" +
                        "左边的框,是输入数据的框,支持多行数据,"+
                        "数据开头和结尾要用英文双引号,例如\n   sfsdafdsf\"0810007ffc\"sdfdsfdasf \n"+
                        "首尾之外的其他字符自动忽略,对以上数据,程序会自动取出0x0810007ffc\n"+
                        "转换之后的数据开头和结尾已经固定,用户需使用其他编辑器自行转换成自己所需的格式";
            MessageBox.Show(str);
        }
    }

    public class DataBit
    {

        public ulong value_src = 0;
        public ulong value_dst = 0;
        public int[] bit_src = new int[128];
        public int[] bit_dst = new int[128];
        public char[] bitChar = new char[100];

        static public ulong atoihex(char[] charArray)
        {
            ulong m_integer = 0;
            int u = charArray.Length;
            for (int i = 0; i < u; i++)
            {
                if (charArray[i] <= '9' && charArray[i] >= '0')
                    m_integer = m_integer * 16 + charArray[i] - '0';
                else
                    if (charArray[i] <= 'f' && charArray[i] >= 'a')
                        m_integer = m_integer * 16 + charArray[i] - 'a' + 10;
                    else
                        if (charArray[i] <= 'F' && charArray[i] >= 'A')
                            m_integer = m_integer * 16 + charArray[i] - 'A' + 10;
                        else
                        {
                            MessageBox.Show("error1");
                        }
            }
            return m_integer;
        }

        public void Gen_bit_src()
        {
            for (int i = 0; i < this.bit_src.Length; i++)
                this.bit_src[i] = 0;
            ulong src_temp = this.value_src;
            int u = 0;
            while (src_temp != 0)
            {
                this.bit_src[u] = (1 == (src_temp % 2))?1:0;
                u++;
                src_temp = src_temp / 2;
            }


            test
            
            ulong testvalue = 0;
            for (int i = this.bit_src.Length - 1; i >= 0; i--)
                testvalue = testvalue * 2 + (ulong)this.bit_src[i];

            if (testvalue != this.value_src)
            {
                MessageBox.Show("error2");
            }
            
        }

        public void Gen_bit_dst()
        {
            value_dst = 0;
            for (int i = this.bit_dst.Length - 1; i >= 0 ; i--)
                this.value_dst = value_dst * 2 + (ulong)this.bit_dst[i];
           
        }

    }




    public class CryptString
    {
        ///  
        /// 转换数字成单个16进制字符,要求输入值小于16
        ///  
        /// value
        ///  
        public static string GetHexChar(string value)
        {
            string sReturn = string.Empty;
            switch (value)
            {
                case "10":
                    sReturn = "A";
                    break;
                case "11":
                    sReturn = "B";
                    break;
                case "12":
                    sReturn = "C";
                    break;
                case "13":
                    sReturn = "D";
                    break;
                case "14":
                    sReturn = "E";
                    break;
                case "15":
                    sReturn = "F";
                    break;
                default:
                    sReturn = value;
                    break;
            }
            return sReturn;
        }

        ///  
        /// 返回进制字符串
        ///  
        /// value
        ///  

        public static string ConvertToHexStr(string value)
        {
            string sReturn = string.Empty;
            try
            {

                while (ulong.Parse(value) >= 16)
                {
                    ulong v = ulong.Parse(value);
                    sReturn = GetHexChar((v % 16).ToString()) + sReturn;
                    value = Math.Floor(Convert.ToDouble(v / 16)).ToString();
                }
                sReturn = GetHexChar(value) + sReturn;
            }
            catch
            {
                sReturn = "###Valid Value!###";
            }
            return sReturn;
        }
    } 

       
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值