十六进制高位与低位转换,二进制高位与低位转换

「已注销」 2010-05-25 03:39:50
十六进制:5D096315 高位与低位转换后 :1563095D
如何用程序实现?
还有二进制如何用程序实现?
转换成二进制后有个位移操作能不能用到这里?
...全文
2245 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pzy1234567 2010-05-25
  • 打赏
  • 举报
回复
12楼的说法是对的,int的第一位是符号,使用uint是一个很好的建议,我那里只是给出一个例子,而且我也说了建议使用更长的类型如long,不过还是uint更好,感谢12楼的细心和建议。

由于符号的问题,使用int的确不妥,他的出错范围是:
80xxxxxx--ffxxxxxx
xxxxxx80--xxxxxxff

前者超过了int的最大上限,后者经过转化后超过了int的最大上限。
在这里一鼓作气把它改正确:
uint src = uint.Parse("5D096315", NumberStyles.HexNumber);
uint res = 0;
res |= (src & 0x000000ff) << 24;
res |= (src & 0x0000ff00) << 8;
res |= (src & 0x00ff0000) >> 8;
res |= (src & 0xff000000) >> 24;
兔子-顾问 2010-05-25
  • 打赏
  • 举报
回复
粘贴错了。

DD096315
10方法就会出错。
int 的第一位是符号。如果是1,就会按负数方式存储,要用uint
兔子-顾问 2010-05-25
  • 打赏
  • 举报
回复
楼上方法不通用。如果数据是CDC37B,就会出错。
pzy1234567 2010-05-25
  • 打赏
  • 举报
回复
可以使用移位运算,因为类型是确定的,所以只需要四次移位就可以得到值了。但是这种转化可能会超过int的最大值0x7fffffff,所以建议使用long型来存储结果。

int src = int.Parse("5D096315", NumberStyles.HexNumber);
int res = 0;
res |= (src & 0x000000ff) << 24;
res |= (src & 0x0000ff00) << 8;
res |= (src & 0x00ff0000) >> 8;
res |= (int)((src & 0xff000000) >> 24);

还有二进制如何用程序实现?
转换成二进制后有个位移操作能不能用到这里?

这两个问题不是很清楚楼主想问什么。 int在内存中就是以二进制储存的,计算机中的所有数据都是以二进制储存的,移位操作可以用于这些类型。 但是编译器做了一些事情,让我们对非数值类型不能做移位操作。
vrhero 2010-05-25
  • 打赏
  • 举报
回复
二进制同理...一个循环,8个字符一组反转,自己去写吧...
vrhero 2010-05-25
  • 打赏
  • 举报
回复
直接对字符串操作更简单...一个循环,两字符一组反转,很简单就不写了...
deknight 2010-05-25
  • 打赏
  • 举报
回复
mark
vrhero 2010-05-25
  • 打赏
  • 举报
回复
BitConverter类...
var tmp=BitConverter.GetBytes(long.Parse("5D096315",System.Globalization.NumberStyles.HexNumber));
Array.Reverse(tmp);
return BitConverter.ToInt64(tmp,0).ToString("X8");
兔子-顾问 2010-05-25
  • 打赏
  • 举报
回复
如果是保存的字符串
uint i = uint.Parse("5D096315", System.Globalization.NumberStyles.HexNumber); //0x5D096315;
byte[] arrs = BitConverter.GetBytes(i);
Array.Reverse(arrs);
i = BitConverter.ToUInt32(arrs, 0);
Console.WriteLine(i.ToString("X2"));
兔子-顾问 2010-05-25
  • 打赏
  • 举报
回复
uint i = 0x5D096315;
byte[] arrs = BitConverter.GetBytes(i);
Array.Reverse(arrs);
i = BitConverter.ToUInt32(arrs, 0);
Console.WriteLine(i.ToString("X2"));
兔子-顾问 2010-05-25
  • 打赏
  • 举报
回复
5D096315 ,你如何保存的?
lllanm 2010-05-25
  • 打赏
  • 举报
回复
using System;
using System.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
using System.Globalization;
using System.Net;
lllanm 2010-05-25
  • 打赏
  • 举报
回复
Console.WriteLine("5D096315");
int data1111 = int.Parse("5D096315", NumberStyles.HexNumber);
int data1112 = IPAddress.NetworkToHostOrder(data1111);
string strData = data1112.ToString("X");
Console.WriteLine(strData);

111,097

社区成员

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

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

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