请教一个16进制转换函数的问题~~~~~~~~~~~~~~~

dabaicai 2011-06-01 12:47:06
private bool Num2bs(byte[] aDest, int nValue)
{
aDest[0] = (byte) (nValue / 0x100);
aDest[1] = (byte) (nValue % 0x100);
return true;
}
这个函数我输入-1返回的是byte里面是ff
现在我一个bytes里面是00 ff,要转换为-1,怎么转换,我写的
nValue = (int) (Convert.ToInt32(aSrc[0]) * 0x100) + aSrc[01];
变成了255,该怎么写?
...全文
148 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dabaicai 2011-06-02
  • 打赏
  • 举报
回复
谢谢,那我通讯接收到的一个byte是ff,我怎么判断它的值呢,
因为以前直接用值得,结果得到的是255,可实际上是-1啊
effun 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dabaicai 的回复:]

-1是ff 255也是ff
我网络通信接收的byte是ff,我知道应该是-1还是255呢?
[/Quote]

楼主你连最基本的数据类型都还没有弄清楚。
同样是ff,对于不同的数据类型有不同的意义。从你的程序来看,应该是由两个字节构成的数据类型,那应该是16位的整数System.Int16,如果你接收到的是0x00ff,那他的值一定是255,但如果是0xffff,就要看情况来定了。
如果使用的是Int16,0xffff = -1,但如果使用了无符号的UInt16,那0xffff = 65536。
另外,楼主你的概念也错了。
-1不是ff,对于Int16,应该是ffff,而对于Int32应该是ffffffff,而255则是00ff或者000000ff,不一样的哦。
dabaicai 2011-06-02
  • 打赏
  • 举报
回复
-1是ff 255也是ff
我网络通信接收的byte是ff,我知道应该是-1还是255呢?
effun 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dabaicai 的回复:]

谢谢,那我通讯接收到的一个byte是ff,我怎么判断它的值呢,
因为以前直接用值得,结果得到的是255,可实际上是-1啊
[/Quote]

一个byte是不可能确定一个short或int的值的,其它的byte是不是被你弄丢了啊。
jq_whh 2011-06-02
  • 打赏
  • 举报
回复
这要根据你的通信协议来确定,byte类型就表示0xFF,无符号单字节整型就是255,有符号单字节整型就是-1,双字节整型就还要再取一个字节

[Quote=引用 8 楼 dabaicai 的回复:]
谢谢,那我通讯接收到的一个byte是ff,我怎么判断它的值呢,
因为以前直接用值得,结果得到的是255,可实际上是-1啊
[/Quote]
ghost5216 2011-06-01
  • 打赏
  • 举报
回复
你至少要4个字节
烈火蜓蜻 2011-06-01
  • 打赏
  • 举报
回复
-1的十六进制就是 FF啊 因为计算机系统中的数字是用补码表示的,

-1的补码就是FF,如果是32位的话,就是 0xFFFFFFFF
ZHENNIUBILE 2011-06-01
  • 打赏
  • 举报
回复
秒杀一切HEX转换.


intSystemMsg1 = Int32.Parse("344abcde", System.Globalization.NumberStyles.HexNumber);
porschev 2011-06-01
  • 打赏
  • 举报
回复

十六进制转换

/// <summary>
/// <函数:Encode>
/// 作用:将字符串内容转化为16进制数据编码,其逆过程是Decode
/// 参数说明:
/// strEncode 需要转化的原始字符串
/// 转换的过程是直接把字符转换成Unicode字符,比如数字"3"-->0033,汉字"我"-->U+6211
/// 函数decode的过程是encode的逆过程.
/// </summary>
/// <param name="strEncode"></param>
/// <returns></returns>
public static string Encode(string strEncode)
{
string strReturn = "";// 存储转换后的编码
foreach (short shortx in strEncode.ToCharArray())
{
strReturn += shortx.ToString("X4");
}
return strReturn;
}
/// <summary>
/// <函数:Decode>
///作用:将16进制数据编码转化为字符串,是Encode的逆过程
/// </summary>
/// <param name="strDecode"></param>
/// <returns></returns>
public static string Decode(string strDecode)
{
string sResult = "";
for (int i = 0; i < strDecode.Length / 4; i++)
{
sResult += (char)short.Parse(strDecode.Substring(i * 4, 4), global::System.Globalization.NumberStyles.HexNumber);
}
return sResult;
}

ghost5216 2011-06-01
  • 打赏
  • 举报
回复

int i = -1;
byte[]arrInt=BitConverter.GetBytes(i);
int j = BitConverter.ToInt32(arrInt,0);
if (i==j)
{
MessageBox.Show("成功");
}

110,500

社区成员

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

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

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