文字十六进制值被转换?

时间:2012-12-21 15:56:58

标签: c# literals settings

好的,所以这段代码工作正常,没有问题,突然间它停止了工作。

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBox2.SelectedIndex == 0)
        {
            Settings.Default.ScaleVendor = 0x0B67;
            Settings.Default.ScaleProductID = 0x555E;

        }
        if (comboBox2.SelectedIndex == 1)
        {
            Settings.Default.ScaleVendor = 0x0EB8;
            Settings.Default.ScaleProductID = 0xF000;
        }
        Settings.Default.Save();

    }

现在,每次将Index更改为0时,将0x0B67的值保存为2919,将0x555E的值保存为21854.具有不同值的索引为1的相同故事。 我不记得改变任何与此代码有关的内容但由于某种原因它接受了文字十六进制值并且不再。任何想法为什么它现在转换价值?该设置在用户级别为int。

更新:

规模已被拔掉,这就是为什么它没有在设备阵列中找到供应商和产品,因为Hex是错误的。

3 个答案:

答案 0 :(得分:1)

如果你的代码没有改变,它永远不会显示十六进制值。如果您希望它们以书面形式显示,请使用字符串。

答案 1 :(得分:1)

  

现在每次更改Index时,它将0x0B67的值保存为2919,将0x555E保存为21854。

但这些值是相同的。这段代码:

Settings.Default.ScaleVendor = 0x0B67;

完全等同于:

Settings.Default.ScaleVendor = 2919;

在这两种情况下,它们只是整数值2919 - 无论你用十进制表示还是十六进制都没有区别。

现在你可能已经用值改变了的内容......但是你碰巧使用十六进制作为整数文字这一事实将从不相关的。

答案 2 :(得分:0)

您只是使用以十六进制表示法编写的值。所以0x0B67和2919是相同的数字。如果你想以十六进制格式获得数字,那么:

Console.WriteLine("{0:x}", Settings.Default.ScaleVendor)
// or
Console.WriteLine(Settings.Default.ScaleVendor.ToString("x"))