powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите считать 10 байт ...
39 сообщений из 39, показаны все 2 страниц
Помогите считать 10 байт ...
    #33918351
Zeda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi to all

есть гребанный файл, бинарный который
с него нужно считать 10 байт, причем в этих 10-ти байтах нахотидся целое число.

как их считать ??
в int и long не помещяется.
какие мысли на этот счет ?
Thanks.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33918473
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
массив, или short+long+long
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33918728
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zedaс него нужно считать 10 байт, причем в этих 10-ти байтах нахотидся целое число.в каком формате это число?
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33918935
Zeda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft Zedaс него нужно считать 10 байт, причем в этих 10-ти байтах нахотидся целое число.в каком формате это число?
Там десятичное число
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33918936
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что вы собираетесь с ним делать.

Наибольшее целое в С - long long - 8 байт.

Возможно, имеет смысл, считать его в массив и преобразовать к double?
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33918948
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZedaТам десятичное число

Двоично десятичное или все-таки десятичное?

Я так понимаю, у вас число в виде строки. Тогда считайте на массив символов и преобразуйте к long (atol).
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919112
Zeda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkhЧто вы собираетесь с ним делать.

Наибольшее целое в С - long long - 8 байт.

Возможно, имеет смысл, считать его в массив и преобразовать к double?
А как его в массив считать ?
Тут вот такое написано :

автор(Datatype: packed BCD, right-padded with "0xF")
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919196
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZedaТут вот такое написано :

автор(Datatype: packed BCD, right-padded with "0xF")

Значит у тебя, все-таки, двоично-десятичное.

1. счтываешь в массив, например функцией read.
2. потом берешь контейнер, типа long и обнуляешь его.
3. Если у тебя старший разряд первый, то берешь по байту с начала массива, умножешь на 10 и прибовляешь следующий.
4. Если у тебя старший разряд последний, что более вероятно, то делаешь то же самое но наоборот, т.е. кладешь в контейнер последний байт, умножаешь на 10, прибавляешь предпоследний, опять на десять, прибавляешь еще предыдущий и т.д.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919341
Zeda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще один вопрос:
а нафига вот это автор"0xF" нужно ?
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919360
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
packed BCD вроде бы подразумевает ДВЕ десятичные цифры в байте
ZedaИ еще один вопрос:
а нафига вот это автор"0xF" нужно ? А ты это у автор а, которого цитируешь, спроси :)
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919467
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZedaИ еще один вопрос:
а нафига вот это автор"0xF" нужно ?

Я так понял, что имелось в виду в одном байте - одна цифра, что как правельно, заметил Barlone, запакованное двоично-десятичное число хранит в одном байте 2-е цифры.

Можит и хотели написать и другое, что надо, мол, этой маской выделять цифры и не забывать сдвигать.

Вообщем, гадание на кофейной гуще.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919556
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZedaИ еще один вопрос:
а нафига вот это автор"0xF" нужно ?



Вероятнее всего это говорит о том, что значащие разряды сдвинуты в лево.
А справа дополнены 0xF до необходимой длины.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919579
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так похоже, что число в BCD формате, то:
а) формат предполатгает что1 десятичное число занимает 4 бита, т.е. 123 будет выглядеть:
[0|0][0|0][0|0][0|0][0|0][0|0][0|0][0|0][0|1][2|3]
сконвертить самому
б) сконвертить через asm
читать asm, там должно быть конвертирование.
брать массив байт(char) идти в асм, пробовать конвертить.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919599
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может это дворик был? ;)

Если есть пример файла, то проще определить по нему.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919603
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin....asm, там должно быть конвертирование....

ассемблер - набор инструкций проца... просветите пожалуйста - какая команда проца(и тип пожалуйста) - занимается "конвертацией" ???


заранее сэнкс
(круглый)
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919636
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0 Aklin....asm, там должно быть конвертирование....

ассемблер - набор инструкций проца... просветите пожалуйста - какая команда проца(и тип пожалуйста) - занимается "конвертацией" ???


Помниться, что-то по работе с этими числами есть. Сейчас поищу.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919656
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919691
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhВоот-с. Коррекции.

Арифметические действия над неупакованными BCD-числами

дык конвертация(чего и куда тогда?) или коррекция ? :)

коррекция (asm)применяется после операций сложения над BCD числами..."упакованные-не упакованные" это от лукавого...процу похрену... другими словами Вы можете сложить 51h с 69h и вместо BAh получить 120h что при представлении в BCD и есть истина... сама команда должна следовать сразу после сложения (либо сложения с переносом)...
Пример...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
mov  a,#051h
mov  b,#069h
add  a,b
ad
mov  b,#00h
jnc   xru_001
mov  b,#01h
xru_001:
;-- сдесь имеем b:a = 120h


теперь возвращаемся к баранам...
ну и каким лешим Вы рекомендуете это ?

с уважением
(круглый)
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919723
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0
теперь возвращаемся к баранам...
ну и каким лешим Вы рекомендуете это ?


автор
* сложение неупакованных BCD-чисел;
* вычитание неупакованных BCD-чисел;
* умножение неупакованных BCD-чисел;
* деление неупакованных BCD-чисел;
* сложение упакованных BCD-чисел;
* вычитание упакованных BCD-чисел.


Да, вроде, преобразования нет. Сейчас уже не помню. Давно это было, если бы про BCD не напомнили, так и не вспомнил бы вообще.

ЗЫ: Если почитать топик, то моих рекомендаций по конвертированию в асме там нет. :)
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919736
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh....ЗЫ: Если почитать топик, то моих рекомендаций по конвертированию в асме там нет. :)

я просто о том, что Вы дали наименее трудное правильное решение..в азм - то явно перебор...

с уважением
(круглый)
ЗЫ
Про фразу с эфами - действительно просче будет взглянуть на пример упаковки... Сдаёться мне, что в каждый байт запхнули по одной тэтраде, с прижимом в право...
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33919759
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0Про фразу с эфами - действительно просче будет взглянуть на пример упаковки... Сдаёться мне, что в каждый байт запхнули по одной тэтраде, с прижимом в право...

Имхо, автор топика уже ушел асм изучать.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33921039
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если считать что в c(10байт) число, то:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
#include <iostream.h>

int main(){
	long a;

	char c[ 10 ];
	double d;

	c[ 0 ] = 0x1;
	c[ 1 ] = 0x2;
	c[ 2 ] = 0x3;
	c[ 3 ] = 0x4;
	c[ 4 ] = 0x5;
	c[ 5 ] = 0x6;
	c[ 6 ] = 0x7;
	c[ 7 ] = 0x8;
	c[ 8 ] = 0x9;
	c[ 9 ] = 0x0;

	__asm{
		fbld c
		fst d
	};

	cout << d;
	
	cin>>a;
}
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33923087
Zeda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinесли считать что в c(10байт) число, то:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
#include <iostream.h>

int main(){
	long a;

	char c[ 10 ];
	double d;

	c[ 0 ] = 0x1;
	c[ 1 ] = 0x2;
	c[ 2 ] = 0x3;
	c[ 3 ] = 0x4;
	c[ 4 ] = 0x5;
	c[ 5 ] = 0x6;
	c[ 6 ] = 0x7;
	c[ 7 ] = 0x8;
	c[ 8 ] = 0x9;
	c[ 9 ] = 0x0;

	__asm{
		fbld c
		fst d
	};

	cout << d;
	
	cin>>a;
}


Код: plaintext
1.
2.
Build
  [C++ Error] Unit1.cpp( 29 ): E2329 Invalid combination of opcode and operands
Почему ?? что -то не так настроено ???


Я считываю эти десят байт в массив по байту, далее для разбиваю каждый элемент этого массива на две тетрады

Код: plaintext
1.
2.
int buf1 = mas[i] & 0xF0;
int buf1 = mas[i] & 0x0F;

вроде как должно получится нормальное число. Так ни фига не получается не сходится почему-то.
Вообще у кого небудь есть ссылка на доки по работе с BCD на С++ или С.

Thanks.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33923321
contr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zedaразбиваю каждый элемент этого массива на две тетрады
Код: plaintext
1.
2.
int buf1 = mas[i] & 0xF0;
int buf1 = mas[i] & 0x0F;

Код: plaintext
1.
2.
int buf1 = (mas[i] & 0xF0) >>  4 ;
int buf2 = mas[i] & 0x0F;
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33923830
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zeda Aklinесли считать что в c(10байт) число, то:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
#include <iostream.h>

int main(){
	long a;

	char c[ 10 ];
	double d;

	c[ 0 ] = 0x1;
	c[ 1 ] = 0x2;
	c[ 2 ] = 0x3;
	c[ 3 ] = 0x4;
	c[ 4 ] = 0x5;
	c[ 5 ] = 0x6;
	c[ 6 ] = 0x7;
	c[ 7 ] = 0x8;
	c[ 8 ] = 0x9;
	c[ 9 ] = 0x0;

	__asm{
		fbld c
		fst d
	};

	cout << d;
	
	cin>>a;
}


Код: plaintext
1.
2.
Build
  [C++ Error] Unit1.cpp( 29 ): E2329 Invalid combination of opcode and operands
Почему ?? что -то не так настроено ???


Я считываю эти десят байт в массив по байту, далее для разбиваю каждый элемент этого массива на две тетрады

Код: plaintext
1.
2.
3.
VC  6 . 0  - работает 
int buf1 = mas[i] & 0xF0;
int buf1 = mas[i] & 0x0F;

вроде как должно получится нормальное число. Так ни фига не получается не сходится почему-то.
Вообще у кого небудь есть ссылка на доки по работе с BCD на С++ или С.

Thanks.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33923835
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklinесли считать что в c(10байт) число, то:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
#include <iostream.h>

int main(){
	long a;

	char c[ 10 ];
	double d;

	c[ 0 ] = 0x1;
	c[ 1 ] = 0x2;
	c[ 2 ] = 0x3;
	c[ 3 ] = 0x4;
	c[ 4 ] = 0x5;
	c[ 5 ] = 0x6;
	c[ 6 ] = 0x7;
	c[ 7 ] = 0x8;
	c[ 8 ] = 0x9;
	c[ 9 ] = 0x0;

	__asm{
		fbld c
		fst d
	};

	cout << d;
	
	cin>>a;
}

а что именно вызывает ошибку? я не понял, т.к. у меня все идет.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33923866
dont
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
int CBase::bcd(int dec)
{
   int n1n,n2n,n3n,n4n,n5n,n6n;
   n1n= dec %  10 ;
   n2n= ((dec -n1n)/ 10 ) %  10 ;
   n3n= ((dec - n2n* 10  -n1n)/ 100 ) %  10 ;
   n4n= ((dec - n3n* 100  -n2n* 10  -n1n)/ 1000 ) %  10 ;
   n5n= ((dec - n4n* 1000  -n3n* 100  -n2n* 10  -n1n)/ 10000 ) %  10 ;
   n6n= ((dec - n5n* 10000  -n4n* 1000 - n3n* 100  -n2n* 10  -n1n)/ 100000 ) %  10 ;
   return (n1n+n2n* 16 +n3n* 16 * 16 +n4n* 16 * 16 * 16 +n5n* 16 * 16 * 16 * 16 +n6n* 16 * 16 * 16 * 16 * 16 );
   //return ds::bcd(dec); 
}
Метод класса для 6-ти значныч упакованых.
Можешь развить до вида, который тебе нужно
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33923967
Zeda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
contr Zedaразбиваю каждый элемент этого массива на две тетрады
Код: plaintext
1.
2.
int buf1 = mas[i] & 0xF0;
int buf1 = mas[i] & 0x0F;

Код: plaintext
1.
2.
int buf1 = (mas[i] & 0xF0) >>  4 ;
int buf2 = mas[i] & 0x0F;


Спасибо огромное помогло.
Но одно но, как мне теперь сравнить значение тетрад, т.е. мне надо сравнивать тетрады между собой и если значение тетрады равно "0xF"->15->1111 то нужно взять только все цифры полученные до этой тетрады.
Подскажите как такое можно сделать в виде функции.
причем все это дело критично по скорости...
Подумываю, может на асме че нить .. или со вставками асмовски. Кстати, на счет вставок, доков про вставки эти найти не могу нигде, кто небудь знает какие там правила, чего нужно придерживаться??
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33924374
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZedaПодскажите как такое можно сделать в виде функции.
И в каком виде функция должна это вернуть ? В int 10^20 не войдет, в double младшие разряды потеряются...
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33924425
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
long long - 1.8*10^19 :)
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33924537
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
99999999999999999999 > 18446744073709551615
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33924597
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, это надо у автора спрашивать, могут ли там быть значеня больше 2^64; обязательно ли нужно сохранить точное значение или достаточно округленного в виде double; и вообще что с этими числами потом делается - участвуют они в вычислениях или только сравниваются между собой или просто выводятся в виде строки.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33924640
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneВобщем, это надо у автора спрашивать, могут ли там быть значеня больше 2^64; обязательно ли нужно сохранить точное значение или достаточно округленного в виде double; и вообще что с этими числами потом делается - участвуют они в вычислениях или только сравниваются между собой или просто выводятся в виде строки.

еще:
1. Возможно, там должна обязательно существовать триада 0ф, тогда число влазит в два лонга
2. Возможно, результат предствляетя в виде строки
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33924673
Zeda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh BarloneВобщем, это надо у автора спрашивать, могут ли там быть значеня больше 2^64; обязательно ли нужно сохранить точное значение или достаточно округленного в виде double; и вообще что с этими числами потом делается - участвуют они в вычислениях или только сравниваются между собой или просто выводятся в виде строки.

еще:
1. Возможно, там должна обязательно существовать триада 0ф, тогда число влазит в два лонга
2. Возможно, результат предствляетя в виде строки

Не народ, тут все намного проще:
В эти долбанные 10 байт записаны число (номер) в BCD формате, которое с права заканчивается 0xF (т.е. конец номера). вот и все.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33924718
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zeda....В эти долбанные 10 байт записаны число (номер) в BCD формате, которое с права заканчивается 0xF (т.е. конец номера). вот и все.

Как тут уже писалось выше - нуна организовать цикл, типа while.... где условие работы будет НЕ равенство с 0x0F. Сдвиги, как уже тут отмечалось и умножение на основание СС.

с уважением
(круглый)
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33924733
Zeda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. мне в конечном итоге нужно получить эти цифры как стринг или char без разницы.
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33924769
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zeda Akh BarloneВобщем, это надо у автора спрашивать, могут ли там быть значеня больше 2^64; обязательно ли нужно сохранить точное значение или достаточно округленного в виде double; и вообще что с этими числами потом делается - участвуют они в вычислениях или только сравниваются между собой или просто выводятся в виде строки.

еще:
1. Возможно, там должна обязательно существовать триада 0ф, тогда число влазит в два лонга
2. Возможно, результат предствляетя в виде строки

Не народ, тут все намного проще:
В эти долбанные 10 байт записаны число (номер) в BCD формате, которое с права заканчивается 0xF (т.е. конец номера). вот и все.

О как я угадал!
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33924784
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZedaНо одно но, как мне теперь сравнить значение тетрад,

Смотря как будет организоваваться цикл. Если за один проход будет анализ пары триады, то после анализа условие, будет содержать проверку 2-х триад, если по одной, то одна триада

Получать триаду вы уже умеете, сравнить: trada != 0xf
...
Рейтинг: 0 / 0
Помогите считать 10 байт ...
    #33925501
contr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZedaТ.е. мне в конечном итоге нужно получить эти цифры как стринг или char без разницы.
Прибавляйте к ранее полученным цифам 30 и будет Вам коды символов "0"-"9".
Как объединить символы в строку, думаю, подсказывать особо не надо...
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите считать 10 байт ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]