关于十进制转16进制,然后分割

evilive1104 2014-07-30 03:13:18
private void numericUpDown1_ValueChanged(object sender, EventArgs e)

{

int i = Convert.ToInt32(numericUpDown1.Value);
int text1 = i * 20000;
this.numericUpDown1.Text = "";
text1.ToString(text1.ToString("X6"));//是否能转为16进制??



}

我想用对话框里的数字乘以20000,然后转为16进制,譬如十进制数为10,则需要将200000转为030D40,然后在报文中分割为0X03,0X0D,0X40三个十六进制数。
请各位高人指点,我这个函数该怎么改,然后怎么分割成三个十六进制数啊?
...全文
430 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
卧_槽 2014-07-30
  • 打赏
  • 举报
回复
引用 6 楼 cuiweibin5 的回复:
#region 各进制数间转换 /// <summary> /// 实现各进制数间的转换。ConvertBase("15",10,16)表示将十进制数15转换为16进制的数。 /// </summary> /// <param name="value">要转换的值,即原值</param> /// <param name="from">原值的进制,只能是2,8,10,16四个值。</param> /// <param name="to">要转换到的目标进制,只能是2,8,10,16四个值。</param> public static string ConvertBase(string value, int from, int to) { try { int intValue = Convert.ToInt32(value, from); //先转成10进制 string result = Convert.ToString(intValue, to); //再转成目标进制 if (to == 2) { int resultLength = result.Length; //获取二进制的长度 switch (resultLength) { case 7: result = "0" + result; break; case 6: result = "00" + result; break; case 5: result = "000" + result; break; case 4: result = "0000" + result; break; case 3: result = "00000" + result; break; case 2: result = "000000" + result; break; case 1: result = "0000000" + result; break; } } return result; } catch { //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message); return "0"; } } #endregion
看到这里我有点头晕目眩想吐的感觉。
evilive1104 2014-07-30
  • 打赏
  • 举报
回复
十分感谢楼上各位前辈指点
涛锅 2014-07-30
  • 打赏
  • 举报
回复
引用 10 楼 Z65443344 的回复:
[quote=引用 6 楼 cuiweibin5 的回复:] #region 各进制数间转换 ...} #endregion
看到一大堆case, 不知道有padleft这个函数可以用,难道连for循环也不会么[/quote] 嗯,一般这样很规律的case,就得好好想想改代码了。
於黾 2014-07-30
  • 打赏
  • 举报
回复
引用 6 楼 cuiweibin5 的回复:
#region 各进制数间转换 ...} #endregion
看到一大堆case, 不知道有padleft这个函数可以用,难道连for循环也不会么
by_wind 2014-07-30
  • 打赏
  • 举报
回复
int text1 = i * 20000; string s= text1.ToString("X6"); s就是你要的16进制字符串
threenewbee 2014-07-30
  • 打赏
  • 举报
回复
当然,整个代码本身都是多余的。
threenewbee 2014-07-30
  • 打赏
  • 举报
回复
switch (resultLength) { case 7: result = "0" + result; break; case 6: result = "00" + result; break; ... 好垃圾的代码 result = resultPad.PadLeft(8, '0');即可
cuiweibin5 2014-07-30
  • 打赏
  • 举报
回复
#region 各进制数间转换 /// <summary> /// 实现各进制数间的转换。ConvertBase("15",10,16)表示将十进制数15转换为16进制的数。 /// </summary> /// <param name="value">要转换的值,即原值</param> /// <param name="from">原值的进制,只能是2,8,10,16四个值。</param> /// <param name="to">要转换到的目标进制,只能是2,8,10,16四个值。</param> public static string ConvertBase(string value, int from, int to) { try { int intValue = Convert.ToInt32(value, from); //先转成10进制 string result = Convert.ToString(intValue, to); //再转成目标进制 if (to == 2) { int resultLength = result.Length; //获取二进制的长度 switch (resultLength) { case 7: result = "0" + result; break; case 6: result = "00" + result; break; case 5: result = "000" + result; break; case 4: result = "0000" + result; break; case 3: result = "00000" + result; break; case 2: result = "000000" + result; break; case 1: result = "0000000" + result; break; } } return result; } catch { //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message); return "0"; } } #endregion
threenewbee 2014-07-30
  • 打赏
  • 举报
回复
科普: http://www.cnblogs.com/graphics/archive/2011/04/22/2010662.html 如果你想颠倒,就用 byte[] result = BitConverter.GetBytes(i).Reverse().ToArray();
threenewbee 2014-07-30
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
[quote=引用 1 楼 caozhy 的回复:] int i = 200000; byte[] result = BitConverter.GetBytes(i);
学习了.不过结果为什么是{40,0D,03,00}?高低字节顺序是反的.[/quote] 不同处理器不一样 Intel X86是小端序处理器(Little-endian)
於黾 2014-07-30
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
int i = 200000; byte[] result = BitConverter.GetBytes(i);
学习了.不过结果为什么是{40,0D,03,00}?高低字节顺序是反的.
於黾 2014-07-30
  • 打赏
  • 举报
回复
数字在计算机中存储,本来就都是2进制,显示成10进制或16进制那是显示的问题. 想把数字200000当做16进制转成字符串,text1.ToString("X6")不就转了么 然后循环一下,用substring方法依次取出2位来,放到string或string数组里 再Conver.ToInt32(string,16);就又把16进制表示的字符串转成数字了 你把这个数字装入byte中就可以了.
threenewbee 2014-07-30
  • 打赏
  • 举报
回复
int i = 200000; byte[] result = BitConverter.GetBytes(i);
select number16,substring(number16,1,1) a,substring(number16,2,1) b, substring(number16,3,1) c, substring(number16,4,1) d, substring(number16,5,1) e,substring(number16,6,1) f, substring(number16,7,1) g, substring(number16,8,1) h, convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,1,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,7) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,2,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,6) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,3,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,5) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,4,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,4) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,5,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,3) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,6,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,2) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,7,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,1) + convert(decimal(10,0),isnull(replace(replace(replace(replace(replace(replace(substring(number16,8,1),'A','10'),'B','11'),'C','12'),'D','13'),'E','14'),'F','15'),0)) * power(16,0) from test_16to10 where len(number16)>6 -- create table test_16to10(number16 varchar(10) not null); --ex: number16 value is:'D95B7D3C'

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧