【问题标题】:Converting int to hex but not string将 int 转换为十六进制而不是字符串
【发布时间】:2025-11-26 02:50:01
【问题描述】:

现在我知道将 int 转换为 hex 很简单,但这里有个问题。 我有一个 int,我想将其转换为十六进制,然后向其中添加另一个十六进制。 简单的解决方案是int.Tostring("X"),但是在我的 int 变成 hex 之后,它也变成了 string,所以在它再次变成 int 之前我不能添加任何东西。

所以我的问题是;有没有办法将 int 转换为十六进制并避免将其转换为字符串。我的意思是一种快速的方法,例如int.Tostring("X"),但没有将 int 转换为字符串。

【问题讨论】:

  • 否;对整数进行数学运算,只在需要时创建一个十六进制字符串——这通常是在最终输出阶段。
  • 您不能将十六进制值表示为字符串以外的任何其他值,因为它包含字母字符。使用整数表示进行操作,并将其转换为十六进制以进行输出.
  • 好的,先生们。知道了。谢谢
  • 计算机不会真正用整数或十六进制来思考,它们会为它们做 0 和 1,其他任何东西都只是对当前值的解释。
  • 但是十六进制字符串距离更远

标签: c# string int hex


【解决方案1】:

我的意思是一种快捷方式,例如int.Tostring("X"),但没有 int 转成字符串。

没有。

这样看。它们之间有什么区别?

var i = 10;
var i = 0xA;

作为一个值,它们完全相同相同。作为一个表示,第一个是decimal notation,第二个是hexadecimal notation。您使用的X hexadecimal format specifier 会生成那个数值的十六进制表示法。

请注意,您可以随时将此十六进制表示法字符串解析为整数。

【讨论】:

  • 我正在试验 ReadProcessMemory。它的第一个参数(地址)是一个 IntPtr。地址是十六进制还是十进制会不会有问题?
  • @JohnP。 IntPtr 是本机整数,据我所知,它的大小可以更改。老实说,我没有足够的信息来回答你的问题。
【解决方案2】:

无需转换。数字十是十,用二进制或十六进制写,是的,它们的表示方式会有所不同,具体取决于您编写它们的基数,但值是相同的。因此,只需将另一个整数添加到您的整数中 - 并在需要时将最终结果转换为十六进制字符串。


举个例子。假设你有

int x = 10 + 10; // answer is 20 or 0x14 in Hex.

现在,如果你添加了

int x = 0x0A + 0x0A; // x == 0x14

结果仍然是0x14。看到了吗?

数字100x0A 具有相同的值,只是它们的基数不同。

十六进制字符串虽然是一个不同的野兽。 在上述情况下,可能是“0x14”。 对于计算机,这将存储为:'0', 'x', '1', '4' - 四个单独的字符(或以某种编码表示这些字符的字节)。而对于整数,则存储为单个整数(以二进制形式编码)。

【讨论】:

  • 我没有投反对票,但说“整数 10 在某种程度上也是十六进制”是在自找麻烦。
  • @doctorlove 试图说明不需要转换,有人照字面理解代码
  • 这是我目前正在做的。我只是想知道是否有办法将 dec 转换为十六进制而不将其转换为字符串
  • @JohnP。没有必要。你有整数 10 对吗?加10。并将结果转换为十六进制字符串。
【解决方案3】:

我猜你错过了 什么 是 HEX 和什么是 INT。它们代表一个数字。 1、2、3、4等..数字。有一种查看数字的方式:作为自然数:INT 和十六进制 - 但最后它们是相同的数字。例如,如果您有数字:5 + 5 = 10(整数)和 A(十六进制),但数字相同。只是对他们的看法不同

【讨论】:

    【解决方案4】:

    十六进制只是表示数字的一种方式。十进制数字系统和二进制也是如此,尽管除了一些自定义数字(BigNums etd)之外,只要它的整数(整数我的意思不是浮点数),所有东西都将存储为二进制。您真正想做的可能是对整数执行计算,然后将它们打印为已在本主题 C# convert integer to hex and back again

    中描述的十六进制

    【讨论】:

      【解决方案5】:

      简短的回答:不,也没有必要。

      整数一百七十九 (179) 是十六进制的 B3,base-10 的 179,base-2 的 10110011 和 base-3 的 20122。数字的基数不会改变它的值。 B3、17、10110011、20122都是同一个数字,只是表示不同而已。因此,只要您对同一基数中的数字进行数学运算,它们的基数无关紧要,基数无关紧要。

      因此,在您使用十六进制数字的情况下,它们可以包含诸如“A”、“B”、“C”等字符。所以当你得到一个十六进制的值时,如果它是一个在其十六进制表示中包含一个字母的数字,它必须是一个字符串,因为字母不是整数。要执行您想要的操作,最好将两个数字都转换为常规整数,然后进行数学运算并转换为十六进制。这样做的原因是,如果您希望能够添加(或任何操作)看起来像十六进制的它们,您将需要更改所需运算符在字符串上的行为,这很麻烦。

      【讨论】:

        最近更新 更多