Посл.ответ |
Сообщение |
Ранг: 7.7 (гость) Активность: 0=0 Статус: Участник
|
Создано: 24 января 2007 08:40 · Поправил: Модератор · Личное сообщение · #1
Есть 2 вопроса, если кто-то сможет помоч то буду очень благодарным:
1.
FileRead(h,&buf,1);
int a=(int)buf;
иногда "a" получаеться отрицательное, ето наверное из-за кодировки, как избежать такого глюка и получить значение а по таблице ASCII
2.Например надо на екран вывести симво с кодом 25 (↓), а глупый виндовс его считает неодображаемым, и вместонего выводит закарлючку , можно как-то исправить и получить ↓ ???
Прогу пишу Builder C++
| Сообщение посчитали полезным: |
|
 Ранг: 240.5 (наставник) Активность: 0.19↘0 Статус: Участник Author of ACKiller
|
Создано: 24 января 2007 08:50 · Личное сообщение · #2
FileRead(h,&buf,1);
int a=(char)buf;
| Сообщение посчитали полезным: |
Ранг: 7.7 (гость) Активность: 0=0 Статус: Участник
|
Создано: 24 января 2007 08:54 · Личное сообщение · #3
все так же не помогло, все равно присутствуют отрицательные значение
| Сообщение посчитали полезным: |
 Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 24 января 2007 09:00 · Поправил: s0larian · Личное сообщение · #4
Хе хе, учим С
char buff[64];
ReadFile(h, buff, std::min(sizeof(buff), fileSize), &bytesRead, NULL); // тут посылается указатель
for (unsigned int i = 0; i < bytesRead; ++i)
printf("%c", buff[i]); // а тут уже символ
| Сообщение посчитали полезным: |
Ранг: 7.7 (гость) Активность: 0=0 Статус: Участник
|
Создано: 24 января 2007 09:05 · Личное сообщение · #5
printf("%c", buff[i]);
согласен, но ето если ты в обычном С++,а мы щас говорим о Builder C++, прога не под консолю должна работать.
Мне потом надо "а" передать как пареметр в функцыю, которая его в 16-ричную систему переведет, что-то на подобе Хекс редактора (но очень упрощеного пишу)
| Сообщение посчитали полезным: |
 Ранг: 240.5 (наставник) Активность: 0.19↘0 Статус: Участник Author of ACKiller
|
Создано: 24 января 2007 09:11 · Личное сообщение · #6
Elektronik
Запости сгенерированный ассемблерный код - так сложно понять что не так.
| Сообщение посчитали полезным: |
 Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 24 января 2007 09:22 · Поправил: s0larian · Личное сообщение · #7
Elektronik пишет:
printf("%c", buff[i]);
согласен, но ето если ты в обычном С++,а мы щас говорим о Builder C++, прога не под консолю должна работать.
Пох  это ж всё одно и то же. Ёлки, ты на С вообще писал?
char myChar = buff[0];
SomeFunction(myChar);
// These work too
SomeFunction(buff[0]);
SomeFunction(buff[i]);
| Сообщение посчитали полезным: |
Ранг: 56.3 (постоянный) Активность: 0.03↘0 Статус: Участник
|
Создано: 24 января 2007 09:46 · Личное сообщение · #8
Какой отрицательный положительный? В С++ по стандарту, если не указано обратного, то все типы знаковые, добавляй к типу unsigned и получишь беззнаковое число. Чтобы увидеть символы вместо закорючек тебе надо в DOS кодировке вывод осуществлять.
| Сообщение посчитали полезным: |
Ранг: 7.7 (гость) Активность: 0=0 Статус: Участник
|
Создано: 24 января 2007 11:21 · Личное сообщение · #9
s0larian пишет:
char myChar = buff[0];
SomeFunction(myChar);
SomeFunction-аргументом должен быть ASCII код buff[0];
W[4Fh]LF пишет:
Чтобы увидеть символы вместо закорючек тебе надо в DOS кодировке вывод осуществлять.
я ето тоже понял,вопрос в том как?
| Сообщение посчитали полезным: |
Ранг: 7.7 (гость) Активность: 0=0 Статус: Участник
|
Создано: 24 января 2007 11:22 · Личное сообщение · #10
s0larian пишет:
, ты на С вообще писал?
ну не только ты тут кодить умееш
| Сообщение посчитали полезным: |
 Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 24 января 2007 11:28 · Личное сообщение · #11
Elektronik пишет:
s0larian пишет:
char myChar = buff[0];
SomeFunction(myChar);
SomeFunction-аргументом должен быть ASCII код buff[0];
Ну, так это ж оно и есть. Ты же посылаешь байт (только он со знаком и называтся char).
Elektronik пишет:
W[4Fh]LF пишет:
Чтобы увидеть символы вместо закорючек тебе надо в DOS кодировке вывод осуществлять.
я ето тоже понял,вопрос в том как?
Не-а - переведи это в Win:
BOOL OemToChar(LPCSTR lpszSrc, LPTSTR lpszDst);
| Сообщение посчитали полезным: |
Ранг: 7.7 (гость) Активность: 0=0 Статус: Участник
|
Создано: 24 января 2007 14:43 · Личное сообщение · #12
s0larian пишет:
Ну, так это ж оно и есть. Ты же посылаешь байт (только он со знаком и называтся char).
можеш написать кусок кода который будет вытаскивать ASCII значения buf ???
s0larian пишет:
Не-а - переведи это в Win:
как ??? приведи код
| Сообщение посчитали полезным: |
Ранг: 310.8 (мудрец), 29thx Активность: 0.43↘0 Статус: Участник
|
Создано: 25 января 2007 01:00 · Личное сообщение · #13
Elektronik пишет:
Например надо на екран вывести симво с кодом 25 (↓),
Почитал бы сначала про ASCII. Коды 0х00-0х1F - управляющие и их изображение чисто условное.
Есть ASCII-7(7 битный) и они будут положительные. Здесь лежат знаки, цифры и англицкие буквы.
Есть расширение ASCII-8 - там "чужие" символы и они естественно все будут отрицательные в char.
Нужно использовать unsigned char - в чем проблемы ?!
| Сообщение посчитали полезным: |
Ранг: 53.8 (постоянный) Активность: 0.05↘0 Статус: Участник
|
Создано: 25 января 2007 01:56 · Личное сообщение · #14
Elektronik пишет:
1.
FileRead(h,&buf,1);
int a=(int)buf;
Очень странная функция в С++.
Заюзай эту:
BOOL ReadFile(
HANDLE hFile, // дескриптор файла
LPVOID lpBuffer, // буфер данных
DWORD nNumberOfBytesToRead, // число байтов для чтения
LPDWORD lpNumberOfBytesRead, // число прочитанных байтов
LPOVERLAPPED lpOverlapped // асинхронный буфер
);
Думаю все заработает
| Сообщение посчитали полезным: |
Ранг: 7.7 (гость) Активность: 0=0 Статус: Участник
|
Создано: 25 января 2007 02:11 · Личное сообщение · #15
решение найдено, оказалось все просто:
FileRead(h,&buf,1);
int a=(byte)buf;
| Сообщение посчитали полезным: |
Ранг: 7.7 (гость) Активность: 0=0 Статус: Участник
|
Создано: 25 января 2007 05:56 · Личное сообщение · #16
Например надо на екран вывести симво с кодом 25 (↓), а глупый виндовс его считает неодображаемым, и вмест онего выводит закарлючку , можно как-то исправить и получить ↓ ???
а по етому вопросу кто-топодсказть может?
| Сообщение посчитали полезным: |
Ранг: 21.9 (новичок) Активность: 0.02↘0 Статус: Участник
|
Создано: 25 января 2007 06:00 · Поправил: KpeHDeJIb · Личное сообщение · #17
Elektronik пишет:
Например надо на екран вывести симво с кодом 25 (↓), а глупый виндовс его считает неодображаемым, и вмест онего выводит закарлючку , можно как-то исправить и получить ↓ ???
а по етому вопросу кто-топодсказть может?
Тебе уже сказали - юзай шрифт с досовской кодировкой, т.е. поставь в свойство шрифт контролу куда выводишь текст что нибудь типа Terminal
| Сообщение посчитали полезным: |
Ранг: 53.8 (постоянный) Активность: 0.05↘0 Статус: Участник
|
Создано: 25 января 2007 06:00 · Личное сообщение · #18
Elektronik пишет:
Например надо на екран вывести симво с кодом 25 (↓), а глупый виндовс его считает неодображаемым, и вмест онего выводит закарлючку , можно как-то исправить и получить ↓ ???
Все дело в шрифтах, посмотри каким шрифтом твой символ закодирован и в билдере используй тот же.
| Сообщение посчитали полезным: |