Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.17.45] |
|
Сообщ.
#1
,
|
|
|
Короче... у меня есть 2 буффера.
xCHR[2]; cCHR[1]; в xCHR лежит 0x62, 0x65 (т.е. BE). Можно ли положить как-нибудь в сСHR 0xBE, используя sprintf(или как-нибудь еше) ?? |
Сообщ.
#2
,
|
|
|
Цитата 0xBAD,8.02.04, 18:43 Короче... у меня есть 2 буффера. xCHR[2]; cCHR[1]; в xCHR лежит 0x62, 0x65 (т.е. BE). Можно ли положить как-нибудь в сСHR 0xBE, используя sprintf(или как-нибудь еше) ?? char cTmp[ sizeof( xCHR ) + 1 ], *pcTst; unsigned long ulBIN; memcpy( cTmp, xCHR, sizeof( xCHR ) ); cTmp[ sizeof( xCHR ) ] = '\0'; ulBIN = strtoul( cTmp, &pcTst, 16 ); if( pcTst == &cTmp[ sizeof( xCHR ) ] ) //вроде так cCHR[ 0 ] = ulBIN; |
Сообщ.
#3
,
|
|
|
char* tmp; cCHR[0] = strtoul(xCHR, &tmp, 16); |
Сообщ.
#4
,
|
|
|
У меня кое-что не получается.
char xDATA[32]; char cDATA[16]; В xDATA строка 12932c8ab5с28ba9fcc8da4721f4d5d1. for (i = 0; i < 16; i++) { chr[0] = xDATA[i*2]; chr[1] = xDATA[i*2+1]; cDATA[i] = (BYTE)strtoul(chr, NULL, 16); } Так все работает. for (i = 0; i < 16; i++) { cDATA[i] = (BYTE)strtoul(&xDATA[i*2], NULL, 16); } А так почему-то нет. Мне этот вариант больше нравится. |
Сообщ.
#5
,
|
|
|
Все правильно. Второй вариант преобразовывает всю строку символов (начиная от xDATA + i * 2 до завершающего нуля), а первый - только очередные два символа из строки. Как говориться, "почувствуйте разницу"...
Добавлено в : Да, кстати, лучше, всеж таки, так: for (i = 0; i < 16; i++) { chr[0] = xDATA[i*2]; chr[1] = xDATA[i*2+1]; chr[2] = 0; cDATA[i] = (BYTE)strtoul(chr, NULL, 16); } |
Сообщ.
#6
,
|
|
|
Цитата Все правильно. Второй вариант преобразовывает всю строку символов (начиная от xDATA + i * 2 до завершающего нуля), а первый - только очередные два символа из строки. Как говориться, "почувствуйте разницу"... 1. Во втором варианте у меня нет завершающего нуля. 2. Тогда почему и в этом случае все работает, хотя 4 байта? сhar chr[4]; for (i = 0; i < 16; i++) { chr[0] = xDATA[i*2]; chr[1] = xDATA[i*2+1]; chr[2] = 0x51; chr[3] = 0x11; cDATA[i] = (BYTE)strtoul(chr, NULL, 16); } |
Сообщ.
#7
,
|
|
|
Потому что в стеке после chr может оказаться ноль. Это раз. Второе - в предыдущем примере у тебя в strtoul передается строка, котороая не может быть корректно преобразована в число (слишком длинная).
А о завершающих нулях ге забывай. |
Сообщ.
#8
,
|
|
|
А есть какая-нибудь strtoub ??
|
Сообщ.
#9
,
|
|
|
А зачем? Главное - все аккуратно делать.
|