相当于C#中的sscanf_s?

时间:2011-02-23 04:16:31

标签: c# c++ scanf

UnlockOffset DWORD thisKey char [5]

if(EOF == sscanf_s(thisKey, "%d", &UnlockOffset))

如何在c#中完成上述代码?

DWORD已转换为UInt32thiskey仍为char数组,但我仍然不理解sscanf_s

PS:我确实检查过MSDN,但是我不能很好地理解它,这就是我在这里发布的原因。

4 个答案:

答案 0 :(得分:2)

通常,您可以使用UInt32.Parse(或TryParse)从string中提取信息。 char[]很少用于在C#中存储字符串值,因为string更合适。

答案 1 :(得分:2)

sscanf_s基本上读取一个字符串并提取与格式字符串匹配的内容。如果它无法提取匹配所有格式内容的东西,它将返回EOF

您可以执行类似

的操作
string str = new string(thisKey);
if (!UInt32.TryParse(str, out UnlockOffset))

会完成类似的事情,但可能会或多或少地严格。 UInt32.TryParse如果可以转换字符串则返回true,如果不能则返回false,因此检查EOF将等同于查看TryParse是否为false。

答案 2 :(得分:0)

如果thisKey为“123 456 739”,那么sscanf_s(thisKey, "%d", &UnlockOffset))将获得123 UnlockOffset 这是近似的等价物

string str = new string(thisKey);
string[] strAr = str.Split(' ');
UnlockOffset = Convert.ToUInt32(strAr!=null ? strAr[0] : str);

答案 3 :(得分:0)

由于每个人都已经提到uint.Parse(和uint.TryParse),您可以将char数组转换为这样的整数:

uint UnlockOffset = 0;
foreach (char digit in thisKey)
{
    UnlockOffset *= 10;
    UnlockOffset += (uint)(digit - '0');
}