Модераторы: Partizan, gambit

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Как преобразовать числоиз hexadecimal в int 
V
    Опции темы
qpeHukc
Дата 20.3.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



Есть число.

ushort i;

оно равно допустим 45. 45 - это шестнадцатеричное значение.

Как преобразовать в десятичное ?

тоесть в 69. Может можно без всяких умножений на степень 16-ти ?
PM MAIL ICQ   Вверх
Domestic Cat
Дата 20.3.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Код

uint a = 0x45;
Console.Write(a.ToString("d")) ;



--------------------

PM   Вверх
mr.DUDA
Дата 20.3.2006, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Так:
Код

using System;
using System.Globalization;

class TestApp
{
    static void Main(string[] args)
    {
        int num16 = 23;
        int num10 = int.Parse(num16.ToString(), NumberStyles.HexNumber);
    }
}




--------------------
user posted image
PM MAIL WWW   Вверх
qpeHukc
Дата 20.3.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(mr.DUDA @ 20.3.2006, 16:15)
Так:
Код

using System;
using System.Globalization;

class TestApp
{
    static void Main(string[] args)
    {
        int num16 = 23;
        int num10 = int.Parse(num16.ToString(), NumberStyles.HexNumber);
    }
}


во, работает smile
PM MAIL ICQ   Вверх
ivashkanet
Дата 21.3.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(qpeHukc @ 20.3.2006, 17:20 Найти цитируемый пост)
int num16 = 23;
        int num10 = int.Parse(num16.ToString(), NumberStyles.HexNumber);


Какая-то ерунда получается, ИХМО!!!
Ты береш десятичное число 23 и заставляешь
воспринимать его компьютером как шестнадцетиричное.
Т.Е. преобразуешь его в строку "23", а потом говоришь
что строка это 16-тиричное число (ну чистая ерунда, ИХМО )

qpeHukc, перефразируй, пожалуйста, задачу

1) Если тебе просто нужно перевести запись числа 0x23 в десятичную, то это делается так

Код

int a = 0x23;

Число в int-е храниться как 10-чное(т.е будет именно 35).

2) если число вводиться пользователем, тогда код такой:

Код

int num10 = int.Parse(strUserInt16, NumberStyles.HexNumber);


3) Если же тебе действительно нужно воспринимать 10-чное
число как шестнадцеqpeHukcтиричное, то код именно такой:
Цитата(qpeHukc @ 20.3.2006, 17:20 Найти цитируемый пост)
int num16 = 23;
        int num10 = int.Parse(num16.ToString(), NumberStyles.HexNumber);

Но что делать с A,B,C ... Ведь таких цифр в 10-ом числе нет.
И если можно сформулируй задачу для которой нужен п. 3) (Сам придумать не смог)


P.S. Все что написано выше -- это только мое личное скромное мнение (ИХМО).
Поэтому, если я не прав исправьте меня, пожалуйста.

Это сообщение отредактировал(а) ivashkanet - 21.3.2006, 14:18
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 21.3.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



ivashkanet, если не так эмоционально, то конечно всё зависит от задачи. Вдруг там приходит число, побитое на тетрады как BCD, только с основанием 16 а не 10...


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 21.3.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(mr.DUDA @ 21.3.2006, 11:20 Найти цитируемый пост)
ivashkanet, если не так эмоционально, то конечно всё зависит от задачи. Вдруг там приходит число, побитое на тетрады как BCD, только с основанием 16 а не 10...


Все, чуть-чуть остыл и изменил сообщение.
Прошу прощения, у всех кто видел, за излишнюю эмоциональность. smile

P.S. Ждем ответа, qpeHukc.
PM MAIL WWW ICQ   Вверх
qpeHukc
Дата 22.3.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(ivashkanet @ 21.3.2006, 10:29)
Цитата(qpeHukc @  20.3.2006,  17:20 Найти цитируемый пост)
int num16 = 23;
        int num10 = int.Parse(num16.ToString(), NumberStyles.HexNumber);


Какая-то ерунда получается, ИХМО!!!
Ты береш десятичное число 23 и заставляешь
воспринимать его компьютером как шестнадцетиричное.
Т.Е. преобразуешь его в строку "23", а потом говоришь
что строка это 16-тиричное число (ну чистая ерунда, ИХМО )

qpeHukc, перефразируй, пожалуйста, задачу

1) Если тебе просто нужно перевести запись числа 0x23 в десятичную, то это делается так

Код

int a = 0x23;

Число в int-е храниться как 10-чное(т.е будет именно 35).

2) если число вводиться пользователем, тогда код такой:

Код

int num10 = int.Parse(strUserInt16, NumberStyles.HexNumber);


3) Если же тебе действительно нужно воспринимать 10-чное
число как шестнадцеqpeHukcтиричное, то код именно такой:
Цитата(qpeHukc @ 20.3.2006, 17:20 Найти цитируемый пост)
int num16 = 23;
        int num10 = int.Parse(num16.ToString(), NumberStyles.HexNumber);

Но что делать с A,B,C ... Ведь таких цифр в 10-ом числе нет.
И если можно сформулируй задачу для которой нужен п. 3) (Сам придумать не смог)


P.S. Все что написано выше -- это только мое личное скромное мнение (ИХМО).
Поэтому, если я не прав исправьте меня, пожалуйста.

мне нужно воспринимать 10-тичное как 16-ричное.
Задача - настройка каналов платы АЦП.

Опции одного канала - это последовательность битов. Например 10011001.

Из этих нулей и едениц я формирую 10-тичное число и передаю его в структуру, настраивающую плату. Но там нужно 16-ричное значение этого полученного 10-тичного числа.

Это сообщение отредактировал(а) qpeHukc - 22.3.2006, 19:19
PM MAIL ICQ   Вверх
ivashkanet
Дата 22.3.2006, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(qpeHukc @ 22.3.2006, 19:14 Найти цитируемый пост)
Опции одного канала - это последовательность битов. Например 10011001.

Я формирую 10-тичное число и передаю его в структуру, настраивающую плату. Но там нужно 16-ричное число.


То есть у тебя по сути десятичные число состоящие только из 0 и 1 ???
А почему при формировании десятичного сразу не перевести двоичное в десятичное.

И что значит формирую????
PM MAIL WWW ICQ   Вверх
qpeHukc
Дата 22.3.2006, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(ivashkanet @ 22.3.2006, 19:21)
Цитата(qpeHukc @  22.3.2006,  19:14 Найти цитируемый пост)
Опции одного канала - это последовательность битов. Например 10011001.

Я формирую 10-тичное число и передаю его в структуру, настраивающую плату. Но там нужно 16-ричное число.


То есть у тебя по сути десятичные число состоящие только из 0 и 1 ???
А почему при формировании десятичного сразу не перевести двоичное в десятичное.

И что значит формирую????

У меня обычное 10-тичное число

Вот так формирую

Math.Pow(2, 7) * ONEChanel.MA0 + Math.Pow(2, 6) * ONEChanel.MA1 +
Math.Pow(2, 5) * ONEChanel.MA2 + Math.Pow(2, 4) * ONEChanel.MA3 +
Math.Pow(2, 3) * ONEChanel.MA4 + Math.Pow(2, 2) * ONEChanel.MA5 +
Math.Pow(2, 1) * ONEChanel.GS0 + Math.Pow(2, 0) * ONEChanel.GS1

умножением 0 или 1 на степень двойки.
PM MAIL ICQ   Вверх
mr.DUDA
Дата 22.3.2006, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(qpeHukc @ 22.3.2006, 18:14 Найти цитируемый пост)
Но там нужно 16-ричное значение этого полученного 10-тичного числа.

Оно там что, в строке лежать должно ?

Числа - это числа. Для тебя они могут быть в десятичном, в двоичном, хоть в восьмеричном формате. В памяти они хранятся одинаково. Можешь присвоить int-переменной двоичное значение напрямую и не париться, если какая-то другая часть программы будет работать с 16-чными вычислениями (сдвиги, лог. операции и т.п.).


--------------------
user posted image
PM MAIL WWW   Вверх
qpeHukc
Дата 22.3.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(mr.DUDA @ 22.3.2006, 19:27)
Цитата(qpeHukc @  22.3.2006,  18:14 Найти цитируемый пост)
Но там нужно 16-ричное значение этого полученного 10-тичного числа.

Оно там что, в строке лежать должно ?

Числа - это числа. Для тебя они могут быть в десятичном, в двоичном, хоть в восьмеричном формате. В памяти они хранятся одинаково. Можешь присвоить int-переменной двоичное значение напрямую и не париться, если какая-то другая часть программы будет работать с 16-чными вычислениями (сдвиги, лог. операции и т.п.).

я уже пробовал - настраивал каналы так (как описано в примере документации к плате) -

helper.Chn[0] = 0x14; // ushort Chn[128];
helper.Chn[1] = 0x0;
helper.Chn[2] = 0x45;
...

в helper.Chn[0] попадало 10-тичное значение числа 0x14

а когда я сам формирую число, мне ж его никак в helper.Chn[i] не записать в 16-чном значении. Я ж не могу написать

helper.Chn[0] = 0xsomeValue;

Это сообщение отредактировал(а) qpeHukc - 22.3.2006, 19:40
PM MAIL ICQ   Вверх
ivashkanet
Дата 22.3.2006, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(qpeHukc @ 20.3.2006, 17:20 Найти цитируемый пост)

Код

int num16 = 23;    
int num10 = int.Parse(num16.ToString(), NumberStyles.HexNumber);


А разве не происходит искажение информации?????

Например: было 1101(двоичное) --> 13(десятичное) --> 13(шестнадцетиричное) --> 19(десятичное)
Добавлено @ 19:57
Цитата(qpeHukc @ 22.3.2006, 19:33 Найти цитируемый пост)
я уже пробовал - настраивал каналы так (как описано в примере документации к плате) -

helper.Chn[0] = 0x14; // ushort Chn[128];
helper.Chn[1] = 0x0;
helper.Chn[2] = 0x45;
...

в helper.Chn[0] попадало 10-тичное значение числа 0x14

а когда я сам формирую число, мне ж его никак в helper.Chn[i] не записать в 16-чном значении. Я ж не могу написать

helper.Chn[0] = 0xsomeValue;

Не понял, что должно быть в helper.Chn[0]. 0x14 -- это 20.
Но в ushort всегда хранится 10-ое число, просто записать его можно в 16-ричном виде
Код

string str = i.ToString("x");

"x" охначает что строка должна быть 16-ричная.

PM MAIL WWW ICQ   Вверх
qpeHukc
Дата 22.3.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 18.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(ivashkanet @ 22.3.2006, 19:47)
А разве не происходит искажение информации?????

Например: было 1101(двоичное) --> 13(десятичное) --> 13(шестнадцетиричное) --> 19(десятичное)
Добавлено @ 19:57

Не понял, что должно быть в helper.Chn[0]. 0x14 -- это 20.
Но в ushort всегда хранится 10-ое число, просто записать его можно в 16-ричном виде
Код

string str = i.ToString("x");

"x" охначает что строка должна быть 16-ричная.

Искажение информации происходит. Его я и добиваюсь ж!
Я хочу положить в массив значение шестнадцатеричного числа, которое лежит у меня в переменной типа ushort как десятичное.

Я на десятичное типа ushort смотрю как на шестнадцатеричное и ложу его в массив преобразовав в десятичное.


Следующую реплику не понял. В чем вопрос ?


PM MAIL ICQ   Вверх
ivashkanet
Дата 22.3.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(qpeHukc @ 22.3.2006, 20:13 Найти цитируемый пост)
Следующую реплику не понял. В чем вопрос ?

После формирования 10-ого (умножение степеней двоек) получилось, например, 14.
Что должно быть в helper.Chn[0].
PM MAIL WWW ICQ   Вверх
Закрытая темаСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.