【问题标题】:How to make hex vals acceptable to the compiler?如何使编译器接受十六进制值?
【发布时间】:2012-09-13 16:20:26
【问题描述】:

我正在尝试使用http://www.pinvoke.net/default.aspx/coredll/playsound.html的代码

不过,它会导致几个错误消息,即:“意外字符 '×'”26 次。

所以,我尝试将 val 更改为逐字字符串,如下所示:

SND_SYNC = @"0×0000",

...但现在我得到“无法将类型'string'隐式转换为'int'

我意识到我可以将这些字符串转换为整数,但这真的是这样吗?恐怕我可以让它以这种方式编译,但它仍然无法工作(或更糟)。将这些十六进制值标记为这样的适当方法是什么,以便编译器接受它们?

这是代码的第一部分:

[DllImport("winmm.dll", SetLastError = true)] static extern bool PlaySound(string pszSound, UIntPtr hmod, uint fdwSound);

[Flags]
public enum SoundFlags
{
    SND_SYNC = 0×0000, // <- "unexpected char 'x'"

【问题讨论】:

  • 我一定错过了什么。为什么不在 VS 编辑器中将所有 x 替换为 X(它们是不同的字符)。
  • 你是说x应该大写吗?如果不是,你能举例说明你的意思吗?
  • 当我将链接中的示例代码中的代码复制并粘贴到我的 Visual Studio 环境时,我没有收到任何错误。您确定这段代码上方没有其他问题可能导致所有这些问题吗?
  • 不,我说他们不是X(88 或120)。他们的代码是 215。试试这个代码var x1 = (int)'×'; var x2 = (int)'x';
  • 是的,做到了 - 将小写的 x 更改为大写的 x 解决了问题 - 并且代码非常有效/就像魅力一样!为什么会出现这种混乱和不一致,我不知道,但我很高兴它现在可以通过如此简单的修复工作。

标签: c# enums flags winmm enum-flags


【解决方案1】:

只需分配它们 - SND_SYNC = 0x000

【讨论】:

  • 这就是原始代码所做的,但它不能编译。我会将第一段代码添加到我的原始帖子中,这样您就可以确切地看到代码是什么。
【解决方案2】:

我想你想要

int val = 0x12fe;

【讨论】:

    【解决方案3】:

    我从网站复制一些代码到 c# Visual Studio 2012 编辑器中时遇到了同样的问题,它粘贴的 x 根本不是 x,而是其他字符。用实际的 x 字符、大写或小写替换它们对我有用。

    【讨论】:

      【解决方案4】:

      至少在我的情况下,我必须将所有小写 x 更改为大写 X 才能使其正常工作。

      【讨论】:

      • 其实你所做的并没有改成大写,看U+00D7 char here你把所有这些乘号都换成了X
      • 这对我的口味来说太形而上学了——我只是用更大的 X 替换了那些小 X——我知道,我在那里! ;-) 它有效,这就是我真正关心的。
      • 我很高兴你开心。我只想说,你不知道你换了什么:)
      • 问题仍然存在,为什么该代码对某些人有效,但对其他人无效。
      • Clay,虽然您在问题中链接了this page,但您似乎已经从here(或类似网站)复制了代码。仔细看看这个字符×。这不是字母x。我真的不明白有什么难理解的。
      猜你喜欢
      • 1970-01-01
      • 2019-07-24
      • 2020-10-15
      • 2018-07-26
      • 2011-02-05
      • 2013-06-10
      • 2019-01-23
      • 1970-01-01
      • 2013-01-29
      相关资源
      最近更新 更多