powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Наоборот BCD и string
19 сообщений из 19, страница 1 из 1
Наоборот BCD и string
    #34315782
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть функция получения строки из BCD
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
string BCDStr(unsigned char* buff, int first, int last) {
	unsigned char tmp[ 32 ];
	memset(tmp,  0 ,  32 );
        char _tmp[ 16 ];
	memset(_tmp,  0 ,  16 );

	for (int i = first; i < last; i++) {
                	itoa(buff[i] >>  4 , _tmp,  10 );
                	strncat((char*) tmp, _tmp,  16 );
                        itoa(buff[i] & 0xF, _tmp,  10 );
                	strncat((char*) tmp, _tmp,  16 );
                	}
	return string((char*) tmp);
}
Помогите её реализовать "наоборот", т.е. получить BCD из строки.
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316181
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_Есть функция получения строки из BCD
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
string BCDStr(unsigned char* buff, int first, int last) {
	unsigned char tmp[ 32 ];
	memset(tmp,  0 ,  32 );
        char _tmp[ 16 ];
	memset(_tmp,  0 ,  16 );

	for (int i = first; i < last; i++) {
                	itoa(buff[i] >>  4 , _tmp,  10 );
                	strncat((char*) tmp, _tmp,  16 );
                        itoa(buff[i] & 0xF, _tmp,  10 );
                	strncat((char*) tmp, _tmp,  16 );
                	}
	return string((char*) tmp);  // так делать  низзяяяя см. стороку 2 ( переменная создается в стеке )
}
Помогите её реализовать "наоборот", т.е. получить BCD из строки.



Это будет ISO8583 ?
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316202
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- sax_Есть функция получения строки из BCD
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
string BCDStr(unsigned char* buff, int first, int last) {
	unsigned char tmp[ 32 ];
	memset(tmp,  0 ,  32 );
        char _tmp[ 16 ];
	memset(_tmp,  0 ,  16 );

	for (int i = first; i < last; i++) {
                	itoa(buff[i] >>  4 , _tmp,  10 );
                	strncat((char*) tmp, _tmp,  16 );
                        itoa(buff[i] & 0xF, _tmp,  10 );
                	strncat((char*) tmp, _tmp,  16 );
                	}
	return string((char*) tmp);  // так делать  низзяяяя см. стороку 2 ( переменная создается в стеке )
}
Помогите её реализовать "наоборот", т.е. получить BCD из строки.
Это будет ISO8583 ?
Не понял!!! А как правильно?
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316297
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_ onstat- sax_Есть функция получения строки из BCD
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
string BCDStr(unsigned char* buff, int first, int last) {
	unsigned char tmp[ 32 ];
	memset(tmp,  0 ,  32 );
        char _tmp[ 16 ];
	memset(_tmp,  0 ,  16 );

	for (int i = first; i < last; i++) {
                	itoa(buff[i] >>  4 , _tmp,  10 );
                	strncat((char*) tmp, _tmp,  16 );
                        itoa(buff[i] & 0xF, _tmp,  10 );
                	strncat((char*) tmp, _tmp,  16 );
                	}
	return string((char*) tmp);  // так делать  низзяяяя см. стороку 2 ( переменная создается в стеке )
}
Помогите её реализовать "наоборот", т.е. получить BCD из строки.
Это будет ISO8583 ?
Не понял!!! А как правильно?

Правильно следить чтобы создание и удаление переменных
происходило на одном и том же уровне области видимости.

Другими словами если вы возвращаете указатель то память под данные
должна существовать до вызова функции которая его возвращает.

Как альтернатива, выделять память из кучи внутри функции ( но появится другая проблема, с которой вы столкнетесь при отлове утечки памяти).

В вашем случае после выполнения return переменная unsigned char tmp[32];
и память выделенная под нее прекратит свое существование.
И указатель станет невалидный.
Программа упадет тогда когда вы обратитесь по этому указателю
а эта память будет занята уже другими данными.

Так всетаки ISO8583 ?
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316321
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-Так всетаки ISO8583 ?
Что ISO8583? И при чем тут ISO8583?
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316338
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как тогда получше осуществить преобразование unsigned char* в string?
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316350
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- Пытаюсь запрогать самодельный USB device.
Так всетаки ISO8583 ?
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316351
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_ onstat-Так всетаки ISO8583 ?
Что ISO8583? И при чем тут ISO8583?

Я просто интересуюсь.
Функции по которым вы задаете вопросы последние 2 дня используются в реализации
протокла ISO8583.
Если это секрет можете не отвечать.
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316366
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_А как тогда получше осуществить преобразование unsigned char* в string?

Передавйте указатель на готовый string в функцию в качестве параметра и пишите напрямую.
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316401
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, не секрет. Извращаюсь с USB и микросхемами. Вы по видимому в банковской сфере работаете. А где можно прочитать про эту реализацию. Реализация BCD -> string, или именно этот алгоритм? Хотя других алгоритмов подобного преобразования (хороших алгоритмов) наверно и нет.
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316508
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_Не, не секрет. Извращаюсь с USB и микросхемами. Вы по видимому в банковской сфере работаете. А где можно прочитать про эту реализацию. Реализация BCD -> string, или именно этот алгоритм? Хотя других алгоритмов подобного преобразования (хороших алгоритмов) наверно и нет.

Реализация как привило всегда закрыта, так как может нести
информацию из документации для служебного пользования.
А еще есть и копирайты.

Каждый рисует свою реализацию со своими алгоритмами скорострельностью и багами.
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316560
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- sax_Не, не секрет. Извращаюсь с USB и микросхемами. Вы по видимому в банковской сфере работаете. А где можно прочитать про эту реализацию. Реализация BCD -> string, или именно этот алгоритм? Хотя других алгоритмов подобного преобразования (хороших алгоритмов) наверно и нет.

Реализация как привило всегда закрыта, так как может нести
информацию из документации для служебного пользования.
А еще есть и копирайты.

Каждый рисует свою реализацию со своими алгоритмами скорострельностью и багами.
Эту реализацию я "надыбал" в этом форуме, но кое-чего сам дописал. Ну это уж не такой сложный алгоритм, что аж для служебного. Ведь это не секрет как BCD загнать в стороку - сдвиг на 4 и побитное "и"
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316620
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_ onstat- sax_Не, не секрет. Извращаюсь с USB и микросхемами. Вы по видимому в банковской сфере работаете. А где можно прочитать про эту реализацию. Реализация BCD -> string, или именно этот алгоритм? Хотя других алгоритмов подобного преобразования (хороших алгоритмов) наверно и нет.

Реализация как привило всегда закрыта, так как может нести
информацию из документации для служебного пользования.
А еще есть и копирайты.

Каждый рисует свою реализацию со своими алгоритмами скорострельностью и багами.
Эту реализацию я "надыбал" в этом форуме, но кое-чего сам дописал. Ну это уж не такой сложный алгоритм, что аж для служебного. Ведь это не секрет как BCD загнать в стороку - сдвиг на 4 и побитное "и"

Сам алгоритм как работать с BCD не есть секретом.
Обратно делатеся также, через здвиг,

Первый байт - сдвигается лево на четыре. младший полубайт обнуляется.
Второй байт - обнуляется старшый полубайт.
Логическим ИЛИ складываются 1 и 2 байты.

Получаем 1 байт пакованный BCD.
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316658
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С++ вообще плохо знаю, читаю Страуструпа, надеюсь поможет Без практики плохо и стандартные функции не знаю, вот и извращаюсь как могу. К примеру
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
int intlenпер(int value){
        int len =  1 ;
        int del =  10 ;
        bool check = false;
        while(!check){
                if ((value/del)>= 1 ){
                        len++;
                        del*= 10 ;
                }
                else
                check = true;
        }
        return len;
}
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316777
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_С++ вообще плохо знаю, читаю Страуструпа, надеюсь поможет Без практики плохо и стандартные функции не знаю, вот и извращаюсь как могу. К примеру
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
int intlenпер(int value){
        int len =  1 ;
        int del =  10 ;
        bool check = false;
        while(!check){
                if ((value/del)>= 1 ){
                        len++;
                        del*= 10 ;
                }
                else
                check = true;
        }
        return len;
}



А если число отрицательное?

Так наверное проще и дешевле:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#define MAXSZ  6 

int intlenпер(int value)
{
char buf[MAXSZ+ 1 ];
bzero(&buf[ 0 ], MAXSZ+ 1 );
int res=sprintf(&buf[ 0 ],"%d" ,value);
if ( res!= 1 ) throw some_execption("Not integer value");
return strlen(&buf[ 0 ]);

...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316798
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int getlength(int value){
        char mas[ 33 ];
        memset(mas, 0 , 33 );
        itoa(value,mas, 10 );
        int len;
        if (value <  0 ) len = strlen(mas)- 1 ;
        else len = strlen(mas);
        return len;
}
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316940
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_А так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int getlength(int value){
        char mas[ 33 ];
        memset(mas, 0 , 33 );
        itoa(value,mas, 10 );
        int len;
        if (value <  0 ) len = strlen(mas)- 1 ;
        else len = strlen(mas);
        return len;
}


В принципе теже яйца :)

Кстате в моем коде можно выбросить нафик


Код: plaintext
1.
if ( res!= 1 ) throw some_execption("Not integer value");
протормозил.

Он нужен в случае обратного преобразования строки в число через scanf.

Чем scanf лучше atoi? Тем что возвращает количество
корректно считанных(преобразованных) переменных в соотвествии с указанным ему форматом.



Я до сих пор не понял как вы считаете длину отрицательных чисел ?
Почему вы уменьшаете длину если число отрицательное?
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316983
sax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- sax_А так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int getlength(int value){
        char mas[ 33 ];
        memset(mas, 0 , 33 );
        itoa(value,mas, 10 );
        int len;
        if (value <  0 ) len = strlen(mas)- 1 ;
        else len = strlen(mas);
        return len;
}


В принципе теже яйца :)

Кстате в моем коде можно выбросить нафик


Код: plaintext
1.
if ( res!= 1 ) throw some_execption("Not integer value");
протормозил.

Он нужен в случае обратного преобразования строки в число через scanf.

Чем scanf лучше atoi? Тем что возвращает количество
корректно считанных(преобразованных) переменных в соотвествии с указанным ему форматом.



Я до сих пор не понял как вы считаете длину отрицательных чисел ?
Почему вы уменьшаете длину если число отрицательное?

Потому что itoa знак минус тоже учитывает
...
Рейтинг: 0 / 0
Наоборот BCD и string
    #34316995
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sax_ onstat- sax_А так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int getlength(int value){
        char mas[ 33 ];
        memset(mas, 0 , 33 );
        itoa(value,mas, 10 );
        int len;
        if (value <  0 ) len = strlen(mas)- 1 ;
        else len = strlen(mas);
        return len;
}


В принципе теже яйца :)

Кстате в моем коде можно выбросить нафик


Код: plaintext
1.
if ( res!= 1 ) throw some_execption("Not integer value");
протормозил.

Он нужен в случае обратного преобразования строки в число через scanf.

Чем scanf лучше atoi? Тем что возвращает количество
корректно считанных(преобразованных) переменных в соотвествии с указанным ему форматом.



Я до сих пор не понял как вы считаете длину отрицательных чисел ?
Почему вы уменьшаете длину если число отрицательное?

Потому что itoa знак минус тоже учитывает

То есть минус вам в длине не нужен, тогда все понятно.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Наоборот BCD и string
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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