эквивалент sscanf_s в C #? - PullRequest
       1

эквивалент sscanf_s в C #?

2 голосов
/ 23 февраля 2011

UnlockOffset - это DWORD . thisKey - это char [5]

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

Как сделать код выше в c #?

DWORD был преобразован в UInt32, а thiskey остался массивом char, но я до сих пор не понимаю sscanf_s.

PS: Я проверял MSDN, но не смог понять его очень хорошо, поэтому я разместил его здесь.

Ответы [ 4 ]

2 голосов
/ 23 февраля 2011

sscanf_s в основном читает строку и извлекает материал, соответствующий строке формата. Он вернет EOF, если не сможет извлечь материал, соответствующий всем форматным вещам.

Вы могли бы сделать что-то вроде

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

, что может привести к чему-то похожему, но это может быть более или менее строго. UInt32.TryParse возвращает истину, если она может преобразовать строку, и ложь, если не может, поэтому проверка на EOF будет эквивалентна проверке, является ли TryParse ложным.

2 голосов
/ 23 февраля 2011

Обычно вы используете UInt32.Parse (или TryParse) для извлечения информации из string. Редко char[] используется для хранения строковых значений в C #, так как string более уместно.

0 голосов
/ 23 февраля 2011

Поскольку все уже упомянули uint.Parseuint.TryParse), вы можете преобразовать свой массив символов в целое число следующим образом:

uint UnlockOffset = 0;
foreach (char digit in thisKey)
{
    UnlockOffset *= 10;
    UnlockOffset += (uint)(digit - '0');
}
0 голосов
/ 23 февраля 2011

Если 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);
...