C# short、string、二进制之间的转换问题。
需求将一个short类型整数拆分成两个8位的十六进制数。如:将258拆分成(Hi)0x01和(Lo)0x02(二进制是0000000100000010)如果是正数,很好解...
需求将一个 short 类型整数拆分成两个8位的十六进制数。
如:
将 258 拆分成 (Hi)0x01 和(Lo)0x02 (二进制是 0000 0001 0000 0010)
如果是正数,很好解决,
Hi = 258 /256 (= 1 = 0x01 = 0000 0001)
Lo = 258%256 (= 2 = 0x02 = 0000 0010 )
如果是负数怎么做?
如 -258 要拆分成 (Hi)0xFE 和(Lo)0xFE (二进制是 1111 1110 1111 1110)
由 -258 怎么得到 Hi 和 Lo ,这两个十六进制的数。
注,在程序中,Hi 和 Lo 用 byte 表示,也就是说,我最终要得到
byte Hi = 254 (1111 1110),byte是无符号的
byte Lo = 254 (1111 1110)。
我的一个想法是
先将 -258 转换成 1111 1110 1111 1110 这个字符串,然后再将这个字符串截取成
1111 1110 和 1111 1110 两部分,然后再分别装换成 byte 类型。
问题是,怎么 将 -258 转换成 1111 1110 1111 1110 这个字符串?
我自己找到了一个解决方法:
short n1 = -258;
string s1 = String.Format("{0:X}", n1);
s1 = s1.PadLeft(4,'0');
string shi = s1.Substring(0, 2);
string slo = s1.Substring(2, 2);
byte hi = byte.Parse(shi, System.Globalization.NumberStyles.HexNumber);
byte lo = byte.Parse(slo, System.Globalization.NumberStyles.HexNumber); 展开
如:
将 258 拆分成 (Hi)0x01 和(Lo)0x02 (二进制是 0000 0001 0000 0010)
如果是正数,很好解决,
Hi = 258 /256 (= 1 = 0x01 = 0000 0001)
Lo = 258%256 (= 2 = 0x02 = 0000 0010 )
如果是负数怎么做?
如 -258 要拆分成 (Hi)0xFE 和(Lo)0xFE (二进制是 1111 1110 1111 1110)
由 -258 怎么得到 Hi 和 Lo ,这两个十六进制的数。
注,在程序中,Hi 和 Lo 用 byte 表示,也就是说,我最终要得到
byte Hi = 254 (1111 1110),byte是无符号的
byte Lo = 254 (1111 1110)。
我的一个想法是
先将 -258 转换成 1111 1110 1111 1110 这个字符串,然后再将这个字符串截取成
1111 1110 和 1111 1110 两部分,然后再分别装换成 byte 类型。
问题是,怎么 将 -258 转换成 1111 1110 1111 1110 这个字符串?
我自己找到了一个解决方法:
short n1 = -258;
string s1 = String.Format("{0:X}", n1);
s1 = s1.PadLeft(4,'0');
string shi = s1.Substring(0, 2);
string slo = s1.Substring(2, 2);
byte hi = byte.Parse(shi, System.Globalization.NumberStyles.HexNumber);
byte lo = byte.Parse(slo, System.Globalization.NumberStyles.HexNumber); 展开
2个回答
展开全部
-258在计算机内部就是以 1111 1110 1111 1110存储,你只需要用一个循环就可以
for(int i=15;i>=0;--i)
if(1<<i&-258)
putchar('1');
else
putchar('1');
for(int i=15;i>=0;--i)
if(1<<i&-258)
putchar('1');
else
putchar('1');
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询