关于16进制存放问题 请问我如何将十进制500转化成16进制1F4分开存放成 01 F4 两个字节呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 string str = Convert.ToString(500, 16); string str1 = str.Substring(0,str.Length - 2); string str2 = str.Substring(str.Length - 2, 2); byte[] barray = new byte[2]; barray[0] = Convert.ToByte(str1, 16); barray[1] = Convert.ToByte(str2, 16); int i = 500; string strHex = string.Empty; strHex = i.ToString("X"); Console.WriteLine(strHex); 这个需求有点无厘头.最好说说为什么要这样.1f4 相当于 [一百F十4] 不过是16进制的.01f4 如果分成2个字节来存储 真的是很无里头的.好比你要把10进制int 254 分成2个字节254正常情况 应该分成4个字节:[254][0][0][0]如果你要把 0254 分成2个字节存放,并且还存成这样的格式:[02][54]那么这个东西表达的int含义将发生巨变.除非你这是一组加密算法,将来会依据这个规则转换回去.否则实在不知道你这样表达有什么意义.int转换成byte数组原理:例如int 300,因为int占4字节,所以byte数组长度为4,先将300转换成二进制:00000000 00000000 00000001 00101100,然后将每个字节转换成十进制由低到高存入byte数组中,所以最后结果是44 1 0 0 ,byte[0]=44 byte[1]=1 byte[2]=0 byte[3]=0 简单快速的办法: int i = 500; byte a = (byte)((i & 0x0000ff00) >> 8); byte b = (byte)((i & 0x000000ff)); 更简单一些: int i = 500; byte a = (byte)(i >> 8); byte b = (byte)i; strRoom = Convert.ToString(Convert.ToInt32(getRoomNo(lbRoom.SelectedItem.ToString())), 16); if(strRoom.Length <3) { strRoom = "00" + strRoom; MessageBox.Show(strAreaNo + strBuliding + strFloor + strRoom); } else { strHRoom = strRoom.Substring(0, strRoom.Length - 2); if (strHRoom.Length < 2) { strHRoom = "0" + strHRoom; } strLRoom = strRoom.Substring(strRoom.Length - 2, 2); MessageBox.Show(strAreaNo + strBuliding + strFloor + strHRoom + strLRoom); }由于最后我要调用P2P函数,是以字符串的形式发送出去,所以我最后还是采用lpingz的方法,不过谢谢大家的回家,都有分哈!结贴咯~ 兄弟,你是不是要把它转为8位作为通信用呢?如果是你可以用Convert.ToByte()转为字节数据存于一个byte数组中!比如byte[0]=Convert.ToByte(Convert.ToInt32(“01”,16)) 是将字符串分位字节存储吗?比如"aaff"这样的分成byte[0]=0xaa和byte[1]=0xff这中吗?你把问题说清楚一点呢? wpf 托盘程序 很怪的问题,datagridview 绑定 datatable 某列 不能编辑 如何在编辑DATAGRIDVIEW的时候,在这个CELL的右边显示一个选择BUTTON? C#操作intermec PX4i打印机 在winform中的dataGrid问题 大家帮忙看看下面的正则表达式有问题吗? 第一次出现的AUTOGET.exe类型的异常 一个菜鸟的问题 请教程序猿哥哥8位有符号,无符号,16位有符号无符号的问题 请教VC#对SQLSERVER2000的操作问题 C# IO完成端口 winfrom 项目 怎样使用reportviewer控件动态生成内容项目
string str = Convert.ToString(500, 16);
string str1 = str.Substring(0,str.Length - 2);
string str2 = str.Substring(str.Length - 2, 2);
byte[] barray = new byte[2];
barray[0] = Convert.ToByte(str1, 16);
barray[1] = Convert.ToByte(str2, 16);
string strHex = string.Empty;
strHex = i.ToString("X");
Console.WriteLine(strHex);
最好说说为什么要这样.1f4 相当于 [一百F十4] 不过是16进制的.01f4 如果分成2个字节来存储 真的是很无里头的.好比你要把10进制int 254 分成2个字节
254正常情况 应该分成4个字节:[254][0][0][0]
如果你要把 0254 分成2个字节存放,并且还存成这样的格式:
[02][54]
那么这个东西表达的int含义将发生巨变.
除非你这是一组加密算法,将来会依据这个规则转换回去.否则实在不知道你这样表达有什么意义.int转换成byte数组原理:
例如int 300,因为int占4字节,所以byte数组长度为4,先将300转换成二进制:00000000 00000000 00000001 00101100,然后将每个字节转换成十进制由低到高存入byte数组中,所以最后结果是44 1 0 0 ,byte[0]=44 byte[1]=1 byte[2]=0 byte[3]=0
byte a = (byte)((i & 0x0000ff00) >> 8);
byte b = (byte)((i & 0x000000ff));
byte a = (byte)(i >> 8);
byte b = (byte)i;
strRoom = Convert.ToString(Convert.ToInt32(getRoomNo(lbRoom.SelectedItem.ToString())), 16);
if(strRoom.Length <3)
{
strRoom = "00" + strRoom;
MessageBox.Show(strAreaNo + strBuliding + strFloor + strRoom);
}
else
{
strHRoom = strRoom.Substring(0, strRoom.Length - 2);
if (strHRoom.Length < 2)
{
strHRoom = "0" + strHRoom;
} strLRoom = strRoom.Substring(strRoom.Length - 2, 2);
MessageBox.Show(strAreaNo + strBuliding + strFloor + strHRoom + strLRoom);
}由于最后我要调用P2P函数,是以字符串的形式发送出去,所以我最后还是采用lpingz的方法,不过谢谢大家的回家,都有分哈!结贴咯~