Guest |
Отправлено: 09.07.2006, 19:36 |
|
Не зарегистрирован
|
никак не пойму. во всех компонентах возвращается ансистринг, а при попытке записать результат в текстовый файл требует чар! они как-то приводятся друг к другу? уже голову сломал! помогите, пожалуйста! мыло zeipt@yandex.ru заранее благодарю!!!
|
|
Konstantine |
Отправлено: 09.07.2006, 22:08 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
чар в ансистринг:
CODE | char *chr="sbldbfldjb";
AnsiString str(chr); |
ансистринг в чар:
CODE | AnsiString str="kdfgblkfnl";
char *chr=str.c_str(); |
|
|
BreakPointMAN |
Отправлено: 10.07.2006, 00:54 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
AnsiString в char*, имхо, лучше так переводить:
CODE |
AnsiString str="qwerty";
char *chr=new char[str.Length()+1];
strcpy(chr,str.c_str());
// ...
delete []chr;
|
|
|
olegenty |
Отправлено: 10.07.2006, 08:52 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
смотря зачем переводить. если не для хранения, то strcpy не надо.
|
|
Shagg |
Отправлено: 10.07.2006, 15:19 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 69
|
еще вопрос (не хотелось из-за этого новый топик открывать ):
почему следующий код
CODE |
Memo1->Lines->Clear();
for (int i=1; i<=Edit1->Text.Length(); i++)
Memo1->Lines->Add((int)Edit1->Text[i]);
|
для символов с кодом больше 126 возвращает отрицательные числа??? |
|
Guest |
Отправлено: 10.07.2006, 15:49 |
|
Не зарегистрирован
|
Первое: с кодом больше 127
Второе: посмотрите инфу по char, int и их знаковых/беззнаковых вариациях. |
|
Boyko |
Отправлено: 10.07.2006, 15:52 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
Потому что ты так написал!
int значит signed int
Так надо написать
... (unsigned) Edit1->Text[i] |
|
Grigoriy |
Отправлено: 10.07.2006, 16:03 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
CODE |
Memo1->Lines->Clear();
for (int i=1; i<=Edit1->Text.Length(); i++)
Memo1->Lines->Add((unsigned char)Edit1->Text[i]);
|
При представлении отрицательного числа — отрицательное число в ячейке памяти — это последовательность битов, в которой самый старший бит равен 1.
При представлении натурального числа — значение может быть только равным или больше 0 при любых значениях битов.
Модуль отрицательного числа, хранящегося в ячейке памяти размером N бит, равен разности числа равного (2 в степени N) и исходного отрицательного числа.
Действительно. Давайте представим, допустим, число -1 так
11111111
а число 1 так
00000001
Сделаем операцию суммирования и убедимся, что действительно -1+1=0
11111111
+
00000001
____________
100000000
Получили 9-значное число, у которого только самый старший (8) бит равен 1. Но в микропроцессоре привыполнении арифметических операций над 8-битными операндами (регистр...регистр, регистр...ячейка памяти, регистр...непосредственный операнд, ячейка памяти...непосредственный операнд) старший бит (8) (нумерация битов с нуля) не сохраняется в операнде-результате, а переносится во флаг CF — нулевой бит регистра флагов. Значит результат действительно будет нулевым.
Пример 2 (-2+1=-1)
11111110
+
00000001
____________
11111111
(Модуль 11111110) = 100000000 — 11111110 = 2.
Если бы складывались числа 254 и 1 результат был бы тот же 255 и столбик записывался точно так же.
В виде одной и той же последовательности битов можно представить как отрицательное число так и положительное.
Как не странно, процессору "все равно", как подразумевается последовательность битов в операнде — как целое число или как натуральное.
Требуемый вариант представления последовательности битов задается типом операнда в языке высокого уровня.
Отредактировано Grigoriy — 10/07/2006, 16:05
|
|