sav2005 |
Отправлено: 13.04.2005, 11:40 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 3
|
Вопрос наверное очень простой.
Есть строка AnsiString, элементами которой есть четыре шеснадцатиричных числа (23 45 23 f). Как эту строку с элементами (числами) преобразовать в одно число (возможно в десятичное), что бы потом его сложить с подобным числом. |
|
AVC |
Отправлено: 13.04.2005, 12:29 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Что в точности вы имеете ввиду под элементами строки ?
То ли у вас так
AnsiString str; str[1]=0x23; str[2]=0x45; str[3]=0x23; str[4]==0x0F;
то ли так
AnsiString str = "234523f";
или еще как то иначе?
И что значит преобразовать в одно? По какому закону? Их можно сложить, перемножить, сделать xor и т.д. |
|
Konstantine |
Отправлено: 13.04.2005, 17:29 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
2 AVC скорее всего так "23 45 23 f"
2 sav2005 подробнее структуру строки — представьте эту строку с разными числами (если можно — то сделать чтоб так: "23 45 23 0f")
|
|
AVC |
Отправлено: 14.04.2005, 08:01 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
2Konstantine
Зачем гадать? Тем более что похоже автору ответ не нужен. |
|
** sav2005 |
Отправлено: 14.04.2005, 09:00 |
|
Не зарегистрирован
|
Нет, ответ нужен. Я попробую уточнить вопрос. Но вместе с ним еще один, как получить десятичное представления символа char. Типа как позволяет inttohex представить в 0х форме. А также шестнадцатиричное число перевести в десятичное.
А также меня интересует следующее: есть массив символов (байтов), равный 4 батов (например 12 56 98 ас). Мне нужно получить из этого массива целое число int (32 бита) 125698ас.
Заранее спасибо. |
|
olegenty |
Отправлено: 14.04.2005, 09:38 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ну строку в число — проще пареной репы:
CODE |
int i = StrToInt("0x2345230f");
|
то есть просто к строке нужно дописать "0x" в начало, и быть счастливым.
касаемо же второго вопроса, с массивом — реши методом сведения решения к уже решенной задаче: из массива сформируй строку, а дальше допиши "0x" в начало и вызови StrToInt. проще пареной репы, как видишь.
только про байты ты пример неверно привёл. тычу новом в ошибку:
так вот, там либо все символы, либо все коды символов, и ты это должен помнить. "ac" — это 172, которые тебе надо приобразовать к строке в hex формате, чтобы получилось "ас".
|
|
AVC |
Отправлено: 14.04.2005, 10:25 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
есть массив символов (байтов), равный 4 батов (например 12 56 98 ас). Мне нужно получить из этого массива целое число int (32 бита) 125698ас.
|
Можно так
CODE |
unsigned char cp[] = {0x12, 0x56, 0x98, 0xac};
int i = (((((cp[0] << 8) | cp[1]) << 8) | cp[2]) << 8) | cp[3];
| |
|
Boyko |
Отправлено: 15.04.2005, 15:40 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
QUOTE (AVC @ 14/04/2005, 09:25) | QUOTE |
есть массив символов (байтов), равный 4 батов (например 12 56 98 ас). Мне нужно получить из этого массива целое число int (32 бита) 125698ас.
|
Можно так
CODE |
unsigned char cp[] = {0x12, 0x56, 0x98, 0xac};
int i = (((((cp[0] << 8) | cp[1]) << 8) | cp[2]) << 8) | cp[3];
|
|
А можно и так
CODE |
unsigned char cp[] = {0x12, 0x56, 0x98, 0xac};
int i = *((int *) cp); // 0x12 — младший байт
| |
|
Konstantine |
Отправлено: 15.04.2005, 16:27 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
2 Boyko там обратный порядок байтов и поэтому твой способ не подходит
|
|
Boyko |
Отправлено: 18.04.2005, 16:29 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
QUOTE (Konstantine @ 15/04/2005, 15:27) | 2 Boyko там обратный порядок байтов и поэтому твой способ не подходит |
2Konstantine
Я знаю и сам написал что 0х12 — младший байт. Хотел выразить только другую идею... |
|