Я написал функцию для записи данных с помощью считывателя SITE IDENTity MaX AVI и проанализировал код объекта и номер ключа. Как я сейчас это делаю, но есть ли лучший способ? Кажется немного хак ... любитель & ЬиХ являются размером 264Преобразование Hex Char Int Int - Есть ли лучший способ?
buf
и buff
являются обугливается
Данные, полученным от читателя:
2009/12/30 14:56:18 epc0 LN:001 C80507A0008A19FA 0000232F Xlat'd
char TAccessReader::HexCharToInt(char n)
{
if (n >= '0' && n <= '9')
return (n-'0');
else
if (n >= 'A' && n <= 'F')
return (n-'A'+10);
else
return 0;
}
bool TAccessReader::CheckSirit(char *buf, long *key_num, unsigned char *fac) {
unsigned short i, j, k;
*key_num = 0; // Default is zero
memset(buff, 0, sizeof(buff));
i = sscanf(buf, "%s %s %s %s %s %s %s", &buff[0], &buff[20], &buff[40],
&buff[60], &buff[80], &buff[140], &buff[160]);
if (i == 7 && buff[147] && !buff[148]) {
// UUGGNNNN UU=spare, GG=Facility Code, NNNN=Keycard Number (all HEX)
// get facility code
*fac = HexCharToInt(buff[142]) * 16 + HexCharToInt(buff[143]);
*key_num = (unsigned short)HexCharToInt(buff[144]) * 4096 +
(unsigned short)HexCharToInt(buff[145]) * 256 +
(unsigned short)HexCharToInt(buff[146]) * 16 +
HexCharToInt(buff[147]);
}
// do some basic checks.. return true or false
}
Каков формат buf? –
Вы можете использовать 'strtoul()' из стандартной библиотеки C. –
'strtol' и' strtoul' re мои любимые функции для этого, потому что они настолько гибкие. Они могут делать шестнадцатеричные, десятичные, восьмеричные и двоичные (любая база от 2 до 36, действительно), и если вы скажете base 0, они будут использовать префиксы C-стиля ('0' для восьмеричного,' 0x' для hex, нет префикса для десятичного), чтобы выяснить базу. Отлично подходит для анализа параметров. Единственное, чего они не делают, это база 64. –