【问题标题】:C# convert int to hex intC# 将 int 转换为十六进制 int
【发布时间】:2016-11-05 05:27:01
【问题描述】:

好的,所以每个人都说要使用:

// Store integer 182
int intValue = 182;
// Convert integer 182 as a hex in a string variable
string hexValue = intValue.ToString("X");
// Convert the hex string back to the number
int intAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

但这不起作用。这是每次有人问的答案,但是当我这样做时,我的整数仍然会转换回十进制。

这不是重复的问题,因为其他所有问题的答案都是错误的,因为这实际上不起作用。将 int 转换为十六进制 int 的真正方法是什么?这样做只会将 intAgain 保持为十进制 182。

【问题讨论】:

  • intAgain 应该是小数。您在 hexValue 中的 HEX 值 ...
  • 我投票结束这个问题作为题外话,因为这个问题是自我回答的。所需的结果已经在hexvalue 中发布的代码中。由于缺乏对价值与展示的理解,张贴者感到困惑。
  • 您是否又错过了一个语言标签malbolge 可能?
  • 为什么你认为intAgain 是小数?很明显,它是一个来自int.Parse整数,而且您已将变量定义为整数。十六进制表示存储在hexValue 中。你能解释一下你到底想在这里做什么吗?
  • 这只是 vs 显示结果的方式。这两个数字是等价的。如果您在观察窗口中查看结果,您可以通过右键单击列标题来更改值类型。

标签: c#


【解决方案1】:

当您声明 int intValue = 182; 时,您会在内存中分配 32 位(4 字节)。 由于内存只能存储二进制值,因此您将 182 存储在内存中,如下所示:

00000000 #Byte 1
00000000 #Byte 2
00000000 #Byte 3
10110110 #Byte 4 

当您执行string hexValue = intValue.ToString("X"); 时,您会在内存中分配一个字符数组来表示一个字符串。
数字 182,十六进制为 B6。
每个字符都存储一个二进制文件,并设置为数字 B6 的一个数字。
要在内存中保存为二进制的字符使用 UTF-16 标准编码(每个字符需要 2 个字节)。
变量 hexValue 的内存表示示例

   01000010 #Byte 1 (char 'B') 
   00000000 #Byte 2
   00110110 #Byte 3 (char '6')
   00000000 #Byte 4 

使用int intAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber); 再次将字符串转换为数字:

00000000 #Byte 1
00000000 #Byte 2
00000000 #Byte 3
10110110 #Byte 4 

int类型不存储数字基数,仅将值以二进制形式存储在内存中,十六进制或十进制只是表示值的一种方式,只有将值转换为可读字符串时才能这样做.

【讨论】:

  • C# 中的char(.NET 中的Char)是一个 UTF-16 代码单元,其中一个或两个编码一个 Unicode 代码点,具体取决于代码点。 “B”需要一个 UTF-16 编码单元,“6”也是如此。如果您考虑到这一点,您的解释将是有效的。 (顺便说一句,.NET、Java、JavaScript、XML、HTML 等都使用 UTF-16。很多很多提到 ASCII 的地方都是错误的。)
  • @Tom Blodget,谢谢我修正了答案,请你确认我是否正确放置了字节订单?
猜你喜欢
  • 2015-04-15
  • 2015-09-17
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 2011-09-21
  • 2014-10-02
相关资源
最近更新 更多