Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Преобразование типов

51K
22 июля 2009 года
Pirit
4 / / 22.07.2009
Есть массив char с шестнадцатиричным представлением числа,
к примеру число 13
str[5]="0x0D"
как эту штуку преобразовать в Uint16?!:confused:
Помогите пожалуйста, заранее благодарен!
5
22 июля 2009 года
hardcase
4.5K / / 09.08.2005
Есть такой орган у человека - Голова.
В ней заключен артефакт - Мозг.
Вообще он обычно дается при рождении...
51K
22 июля 2009 года
Pirit
4 / / 22.07.2009
эм..
был бы благодарен, что если бы к стебу было добавлен совет на Си!
5
23 июля 2009 года
hardcase
4.5K / / 09.08.2005
Ё-моё! Тема освещалась мульён раз в интернетах.
Код:
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;
    }
}
87
23 июля 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Pirit
совет на Си!



Сразу бы так и сказал. В библиотеке stdlib.h (она же cstdlib в C++) есть такая функция:

char str[] = "0x0D";
unsigned short digit = strtoul(str, 0, 0);

353
23 июля 2009 года
Nixus
840 / / 04.01.2007
Цитата: 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;
}
288
23 июля 2009 года
nikitozz
1.2K / / 09.03.2007
Мм. По-моему топикстартеру все же нужен был код на C#.
Что то я не припомню типа UInt16 в C, если конечно это не #define.
842
23 июля 2009 года
sigmov
301 / / 16.09.2008
Цитата: nikitozz
Мм. По-моему топикстартеру все же нужен был код на C#.
Что то я не припомню типа UInt16 в C, если конечно это не #define.



Не а.....
Если бы на C# - он бы не написал:
str[5]="0x0D"

А написал бы
string s="0x0D"

288
23 июля 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: sigmov
Не а.....
Если бы на C# - он бы не написал:
str[5]="0x0D"



Возможно. Хотя запись может быть верна и для С и для C#.

51K
23 июля 2009 года
Pirit
4 / / 22.07.2009
Спасибо большое):)
очень помогли!
Нужно было именно для Си, ибо кодю счас для контроллера Texas Instrument, там оболочка прошивки Си поддерживает!
пойду 16 ричные команды посылать..!
87
23 июля 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Pirit
Нужно было именно для Си, ибо кодю счас для контроллера Texas Instrument, там оболочка прошивки Си поддерживает!
пойду 16 ричные команды посылать..!



Эээ. Ничего не понял. Так звучит, будто в контроллере имеется интерпретатор Си. Зачем он там нужен - не ясно. Скорее всего, соответствующий компилятор Си поддерживает, а не контроллер.

5
24 июля 2009 года
hardcase
4.5K / / 09.08.2005
[offtop]Жесть! И этот человек, не умея строить тупейших алгоритмов, пытается программировать под железо - типа в эмбеддщики заделаться.[/offtop]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог