在C#中将单引号字符串转换为无符号整数

10

我正在将一些 C++ 代码翻译成 C#,并看到了以下定义:

#define x 'liaM'

首先,这个单引号常量意味着什么?我需要在c#中将其转换为字符串常量吗?

其次,在C ++中,这个常量被赋值为一个uint变量的值。它是如何工作的?

uint m = x;

1
由于您的问题主要涉及一些 C++ 代码的含义,我建议您除了添加 C# 标签外,也应该增加 C++ 标签。 - Damien_The_Unbeliever
https://dev59.com/pXA65IYBdhLWcg3wsgyA - Trevor Elliott
3
在C语言中,单引号用于表示一个字符常量,其值是该字符的ASCII码。如果在单引号内放置多个字符,例如'abc',则会导致编译错误。 - Marius Bancila
1个回答

4

这有时被称为FOURCC。有一个Windows API可以将字符串转换为FOURCC,叫做mmioStringToFOURCC,以下是相应的C#代码:

public static int ChunkIdentifierToInt32(string s)
{
    if (s.Length != 4) throw new ArgumentException("Must be a four character string");
    var bytes = Encoding.UTF8.GetBytes(s);
    if (bytes.Length != 4) throw new ArgumentException("Must encode to exactly four bytes");
    return BitConverter.ToInt32(bytes, 0);
}

2
为什么不直接使用BitConverter.ToInt32(char[] { 'l', 'i', 'a', 'M' });跳过字符串呢? - Ben Voigt
@BenVoigt 是的,甚至更好。我编写了上面的代码作为对 mmioStringToFOURCC 调用的即插即用替代方案。 - Mark Heath
实际上,我的评论应该使用 byte[] - Ben Voigt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接