Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

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

来源: delacroix_xu 分享至:

按照用户输入的公式实现 给定数据的各个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; } } }</pre></blockquote> <p><br>  <


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史