C#中sscanf#s的等价物?
C#中sscanf#s的等价物?,c#,c++,scanf,C#,C++,Scanf,解锁偏移量为DWORDthisKey是一个字符[5] 上述代码将如何在c#中完成 DWORD被转换为UInt32,这个键仍然是char数组,但我仍然不理解sscanf\s PS:我确实查看了MSDN,但不能很好地理解它,这就是我将其发布在此处的原因。通常,您会使用(或TryParse)从字符串中提取信息。很少使用char[]在C#中存储字符串值,因为string更合适。sscanf\u s基本上读取字符串并提取与格式字符串匹配的内容。如果无法提取内容以匹配所有格式内容,它将返回EOF 你可以这样
解锁偏移量
为DWORDthisKey
是一个字符[5]
上述代码将如何在c#中完成
DWORD
被转换为UInt32
,这个键仍然是char
数组,但我仍然不理解sscanf\s
PS:我确实查看了MSDN,但不能很好地理解它,这就是我将其发布在此处的原因。通常,您会使用(或TryParse
)从字符串中提取信息。很少使用char[]
在C#中存储字符串值,因为string
更合适。sscanf\u s
基本上读取字符串并提取与格式字符串匹配的内容。如果无法提取内容以匹配所有格式内容,它将返回EOF
你可以这样做
string str = new string(thisKey);
if (!UInt32.TryParse(str, out UnlockOffset))
这将完成类似的事情,但它可能或多或少是严格的UInt32.TryParse
如果可以转换字符串则返回true,如果不能转换则返回false,因此检查EOF将等同于查看TryParse是否为false。如果此键为“123 456 739”,则sscanf_s(此键,%d',&UnlockOffset))
将123放入UnlockOffset
这是一个近似等价物
string str = new string(thisKey);
string[] strAr = str.Split(' ');
UnlockOffset = Convert.ToUInt32(strAr!=null ? strAr[0] : str);
由于每个人都提到了uint.Parse
(和uint.TryParse
),您可以将字符数组转换为如下所示的整数:
uint UnlockOffset = 0;
foreach (char digit in thisKey)
{
UnlockOffset *= 10;
UnlockOffset += (uint)(digit - '0');
}
起初我把它作为一个字符,因为我试图转换代码,因为我不知道如何转换sscanf,直到现在我才懒得把它改成字符串。谢谢,我还想知道EOF是从哪里来的;)假设数组中没有任何垃圾,比如前导空格或尾随空格。@在某些情况下,数组中有一个-
。@Prix:也有。当你一个字符接一个字符的时候会引起问题。(但作为参考,UInt32
是无符号的——这意味着如果你想解析一个负数,你可能无论如何也得不到你期望的值…)我在C中实现了sscanf()
#
uint UnlockOffset = 0;
foreach (char digit in thisKey)
{
UnlockOffset *= 10;
UnlockOffset += (uint)(digit - '0');
}