static ushort ParseUInt16(string str) {
unchecked {
if (string.IsNullOrEmpty(str))
throw new FormatException();
if (!str.StartsWith("0x"))
throw new FormatException();
if (str.Length < 3 || 6 < str.Length)
throw new FormatException();
int x = 0;
for (int i = 2; i < str.Length; ++i) {
char c = str;
int digit = 0;
if ('0' <= c && c <= '9')
digit = (c - '0');
else if ('a' <= c && c <= 'f')
digit = (c - 'a') + 0xA;
else if ('A' <= c && c <= 'F')
digit = (c - 'A') + 0xA;
else
throw new FormatException();
x = (x << 4) | digit;
}
return (ushort)x;
}
}
Преобразование типов
к примеру число 13
str[5]="0x0D"
как эту штуку преобразовать в Uint16?!:confused:
Помогите пожалуйста, заранее благодарен!
В ней заключен артефакт - Мозг.
Вообще он обычно дается при рождении...
был бы благодарен, что если бы к стебу было добавлен совет на Си!
Ё-моё! Тема освещалась мульён раз в интернетах.
Цитата: Pirit
совет на Си!
Сразу бы так и сказал. В библиотеке stdlib.h (она же cstdlib в C++) есть такая функция:
char str[] = "0x0D";
unsigned short digit = strtoul(str, 0, 0);
Цитата: Pirit
эм..
был бы благодарен, что если бы к стебу было добавлен совет на Си!
был бы благодарен, что если бы к стебу было добавлен совет на Си!
Условие не полное, вот код для преобразования без начальных 0x.
Код:
#include <stdio.h>
int parseHex( const char* str ) {
int res = 0;
while( 1 ) {
char c = *str++;
if( c >= '0' && c <= '9' ) {
res = res * 16 + (c - '0');
} else if( c >= 'A' && c <= 'F' ) {
res = res * 16 + (c - 'A') + 10;
} else if( c >= 'a' && c <= 'f' ) {
res = res * 16 + (c - 'a') + 10;
} else {
break;
}
}
return res;
}
int main() {
printf( "%i\n", parseHex( "FF" ) );
// или
printf( "%i\n", strtoul( "FF", 0, 16 ) );
return 0;
}
int parseHex( const char* str ) {
int res = 0;
while( 1 ) {
char c = *str++;
if( c >= '0' && c <= '9' ) {
res = res * 16 + (c - '0');
} else if( c >= 'A' && c <= 'F' ) {
res = res * 16 + (c - 'A') + 10;
} else if( c >= 'a' && c <= 'f' ) {
res = res * 16 + (c - 'a') + 10;
} else {
break;
}
}
return res;
}
int main() {
printf( "%i\n", parseHex( "FF" ) );
// или
printf( "%i\n", strtoul( "FF", 0, 16 ) );
return 0;
}
Что то я не припомню типа UInt16 в C, если конечно это не #define.
Цитата: nikitozz
Мм. По-моему топикстартеру все же нужен был код на C#.
Что то я не припомню типа UInt16 в C, если конечно это не #define.
Что то я не припомню типа UInt16 в C, если конечно это не #define.
Не а.....
Если бы на C# - он бы не написал:
str[5]="0x0D"
А написал бы
string s="0x0D"
Цитата: sigmov
Не а.....
Если бы на C# - он бы не написал:
str[5]="0x0D"
Если бы на C# - он бы не написал:
str[5]="0x0D"
Возможно. Хотя запись может быть верна и для С и для C#.
очень помогли!
Нужно было именно для Си, ибо кодю счас для контроллера Texas Instrument, там оболочка прошивки Си поддерживает!
пойду 16 ричные команды посылать..!
Цитата: Pirit
Нужно было именно для Си, ибо кодю счас для контроллера Texas Instrument, там оболочка прошивки Си поддерживает!
пойду 16 ричные команды посылать..!
пойду 16 ричные команды посылать..!
Эээ. Ничего не понял. Так звучит, будто в контроллере имеется интерпретатор Си. Зачем он там нужен - не ясно. Скорее всего, соответствующий компилятор Си поддерживает, а не контроллер.
[offtop]Жесть! И этот человек, не умея строить тупейших алгоритмов, пытается программировать под железо - типа в эмбеддщики заделаться.[/offtop]