2011-02-23 113 views
2

UnlockOffsetDWORDthisKey炭[5]相當於C#中的sscanf_s?

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

如何將上面的代碼在c#做什麼?

DWORD轉化爲UInt32thiskey保持char陣列,但我仍然不明白sscanf_s

PS:我沒有檢查MSDN,但無法很好地理解它,這就是爲什麼我在這裏發佈它。

+0

我在C#[這裏](http://www.blackbeltcoder.com/Articles/strings/a-sscanf-replacement-for-net) – 2012-02-14 19:42:57

回答

2

sscanf_s基本上讀取一個字符串並提取匹配格式字符串的東西。如果它不能提取東西來匹配所有的格式,它會返回EOF

你可以做類似

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

這將完成類似的東西,但也可能是或多或少嚴格。 UInt32.TryParse如果可以轉換字符串則返回true,否則返回false,因此檢查EOF將等同於查看TryParse是否爲false。

+0

謝謝我也想知道EOF是從哪裏來的;) – Prix 2011-02-23 04:50:19

2

通常,您將使用UInt32.Parse(或TryParse)從string中提取信息。使用char[]來存儲C#中的字符串值很少見,因爲string更合適。

+0

嗯,我實現的sscanf'()'升因爲我試圖轉換代碼,因爲我不知道如何轉換sscanf_s直到現在我沒有打擾將其更改爲字符串。 – Prix 2011-02-23 04:49:03

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); 
0

既然大家都已經提到uint.Parse(和uint.TryParse),您可以將您的字符數組的整數這樣的:

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

假設數組中沒有任何垃圾,就像前導或尾隨空格一樣。 – cHao 2011-02-23 04:56:14

+0

@cHao在某些情況下,它有一個'-'。 – Prix 2011-02-23 05:07:56

+0

@Prix:也是這樣。當你按char排序時,會導致問題。 (但是作爲參考,'UInt32'是*無符號* - 這意味着如果你想解析一個負數,你可能不會得到你期望的值......) – cHao 2011-02-23 05:14:05