Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› Отображение байт
Посл.ответ Сообщение

Ранг: 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.190
Статус: Участник
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.170
Статус: Участник
системщик

Создано: 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.190
Статус: Участник
Author of ACKiller

Создано: 24 января 2007 09:11
· Личное сообщение · #6

Elektronik
Запости сгенерированный ассемблерный код - так сложно понять что не так.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 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.030
Статус: Участник

Создано: 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.170
Статус: Участник
системщик

Создано: 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.430
Статус: Участник

Создано: 25 января 2007 01:00
· Личное сообщение · #13

Elektronik пишет:
Например надо на екран вывести симво с кодом 25 (↓),

Почитал бы сначала про ASCII. Коды 0х00-0х1F - управляющие и их изображение чисто условное.
Есть ASCII-7(7 битный) и они будут положительные. Здесь лежат знаки, цифры и англицкие буквы.
Есть расширение ASCII-8 - там "чужие" символы и они естественно все будут отрицательные в char.
Нужно использовать unsigned char - в чем проблемы ?!



Ранг: 53.8 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 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.020
Статус: Участник

Создано: 25 января 2007 06:00 · Поправил: KpeHDeJIb
· Личное сообщение · #17

Elektronik пишет:
Например надо на екран вывести симво с кодом 25 (↓), а глупый виндовс его считает неодображаемым, и вмест онего выводит закарлючку , можно как-то исправить и получить ↓ ???
а по етому вопросу кто-топодсказть может?


Тебе уже сказали - юзай шрифт с досовской кодировкой, т.е. поставь в свойство шрифт контролу куда выводишь текст что нибудь типа Terminal



Ранг: 53.8 (постоянный)
Активность: 0.050
Статус: Участник

Создано: 25 января 2007 06:00
· Личное сообщение · #18

Elektronik пишет:
Например надо на екран вывести симво с кодом 25 (↓), а глупый виндовс его считает неодображаемым, и вмест онего выводит закарлючку , можно как-то исправить и получить ↓ ???


Все дело в шрифтах, посмотри каким шрифтом твой символ закодирован и в билдере используй тот же.


 eXeL@B —› Программирование —› Отображение байт
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати