两个十六进制数如何合并

anya 2011-09-01 03:36:37
如题。比如说一个是“0x03”,一个是“0x1E”,请问怎么合并成“0x031E”,谢谢,在线等。


因为转换成十进制的话,“0x031E”是798,是正确的值。
但是Convert.ToInt32("0x03", 16) + Convert.ToInt32("0x1E", 16)就等于330,不是正确值。

...全文
3842 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2011-09-01
  • 打赏
  • 举报
回复
Convert.ToInt32("0x03", 16)<<8| Convert.ToInt32("0x1E", 16)
真相重于对错 2011-09-01
  • 打赏
  • 举报
回复 3
0x03<<8|0x1E
anya 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 karascanvas 的回复:]
引用 11 楼 qldsrx 的回复:

这么简单的事,你们都在想什么啊。
C# code
byte b1 = 0x03;
byte b2 = 0x1E;
byte[] bs = new byte[2];
bs[0] = b1;
bs[1] = b2;


楼主的意思是要从字符串转换过来吧。
[/Quote]

是先转成十进制,然后10进制合并成16进制得到结果0X031E。
AthrunArthur 2011-09-01
  • 打赏
  • 举报
回复
不好意思,想成C++的了,不过还是可以在C#中用类似的做法,

[StructLayout(LayoutKind.Explicit)]
struct TokenValue
{
[FieldOffset(0)]
public short val;

[FieldOffset(0)]
public byte high;

[FieldOffset(1)]
public byte low;
}

这样就使得 high 和low所占用的内存位置和val是同一个位置,对high和low赋值之后,自动得到最后的val
anya 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 youzelin 的回复:]
C# code

Convert.ToString(Convert.ToInt32("0x03", 16), 16) +
Convert.ToString(Convert.ToInt32("0x1E", 16), 16)
[/Quote]

用了这个方法问题解决了,谢谢大家支持,结贴。
种草德鲁伊 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qldsrx 的回复:]

这么简单的事,你们都在想什么啊。
C# code
byte b1 = 0x03;
byte b2 = 0x1E;
byte[] bs = new byte[2];
bs[0] = b1;
bs[1] = b2;
[/Quote]

楼主的意思是要从字符串转换过来吧。
qldsrx 2011-09-01
  • 打赏
  • 举报
回复
这么简单的事,你们都在想什么啊。
byte b1 = 0x03;
byte b2 = 0x1E;
byte[] bs = new byte[2];
bs[0] = b1;
bs[1] = b2;
sdl2005lyx 2011-09-01
  • 打赏
  • 举报
回复
来个直接的:
string[] stringSeparators = new string[] {"0x"};
string str1="0x03";
string str2="0x1E";

string str="0x";
string[] result=str1..Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
str+=result[0];

string[] result=str2..Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
str+=result[0];

str最后结果:“0x031E”



种草德鲁伊 2011-09-01
  • 打赏
  • 举报
回复


var x = Convert.ToInt32("0x03".Substring(2) + "0x1E".Substring(2), 16);

anya 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 karascanvas 的回复:]
C# code


int x = Convert.ToInt32("0x03", 16) * Math.Pow(16, 2) + Convert.ToInt32("0x1E", 16);
[/Quote]

无法将类型“double”隐式转换为“int”。存在一个显式转换(是否缺少强制转换?)
  • 打赏
  • 举报
回复
先专为两个十进制求和,再把和专为十六进制
anya 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 athrunarthur 的回复:]
union{
short val;
struct {
byte high;
byte low;
}
写一个这样的结构,把分别对high和low赋值,val中 就是你要的值
[/Quote]

看不懂
anya 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 youzelin 的回复:]
C# code

Convert.ToString(Convert.ToInt32("0x03", 16), 16) +
Convert.ToString(Convert.ToInt32("0x1E", 16), 16)
[/Quote]


得到31E
种草德鲁伊 2011-09-01
  • 打赏
  • 举报
回复


int x = Convert.ToInt32("0x03", 16) * Math.Pow(16, 2) + Convert.ToInt32("0x1E", 16);

AthrunArthur 2011-09-01
  • 打赏
  • 举报
回复

union{
short val;
struct {
byte high;
byte low;
}
写一个这样的结构,把分别对high和low赋值,val中 就是你要的值
anya 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 youzelin 的回复:]
C# code

Convert.ToString(Convert.ToInt32("0x03", 16), 16) +
Convert.ToString(Convert.ToInt32("0x1E", 16), 16)
[/Quote]

不对啊,Convert.ToInt32("0x03", 16)=3
Convert.ToInt32("0x1E", 16)=30

这两个十进制怎么得到0X031E
youzelin 2011-09-01
  • 打赏
  • 举报
回复

Convert.ToString(Convert.ToInt32("0x03", 16), 16) +
Convert.ToString(Convert.ToInt32("0x1E", 16), 16)

111,106

社区成员

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

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

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