Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / printf unsigned int / 25 сообщений из 40, страница 1 из 2
02.02.2007, 12:15
    #34301738
кексbr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Есть
Код: plaintext
char mas[ 32 ];
после заполнения массива (заполняется нулями и единицами) как вывести значения его элементов на консоль. Не получается преобразование unsigned int в unsigned char*
Код: plaintext
1.
2.
3.
 for (int x =  0 ; x< 32  ; x++){
        printf('%d',(char*)mas[x]);
 }
...
Рейтинг: 0 / 0
02.02.2007, 13:09
    #34302015
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Код: plaintext
1.
2.
3.
 for (int x =  0 ; x< 32  ; x++){
        printf('%d', &mas[x]);
 }
Это хотел?
...
Рейтинг: 0 / 0
02.02.2007, 13:11
    #34302024
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
И не '%d', а "%d". Не поглядел сразу.
Код: plaintext
1.
2.
3.
 for (int x =  0 ; x< 32  ; x++){
        printf("%d", &mas[x]);
 }
...
Рейтинг: 0 / 0
02.02.2007, 13:12
    #34302037
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Блин, почему нет возможности редактировать пост? Убейте два предыдущих. Я чё-то сегодня торможу. Пятница, видимо
Код: plaintext
1.
2.
3.
 for (int x =  0 ; x< 32  ; x++){
        printf("%d", mas[x]);
 }
...
Рейтинг: 0 / 0
02.02.2007, 13:19
    #34302069
кексик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
HryuckinnenИ не '%d', а "%d". Не поглядел сразу.
Код: plaintext
1.
2.
3.
 for (int x =  0 ; x< 32  ; x++){
        printf("%d", &mas[x]);
 }

Да, я тоже заметил.
Тогда у меня ещё вопрос

для char* необходимо сделать '0' + символ char* ( 0 или 1),
с помощью strncat можно сделать только символ char* ( 0 или 1) + '0'. Как быть?
...
Рейтинг: 0 / 0
02.02.2007, 13:24
    #34302104
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Ничего не понял. Ты хочешь хранить по два символа в одном значении типа char? Так делают ассемблерные программеры под MSDOS. В си лучше так не делать, ибо нуевонафиг. Поясни, как исходная задача формулируется.
...
Рейтинг: 0 / 0
02.02.2007, 13:37
    #34302164
кексик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
HryuckinnenНичего не понял. Ты хочешь хранить по два символа в одном значении типа char? Так делают ассемблерные программеры под MSDOS. В си лучше так не делать, ибо нуевонафиг. Поясни, как исходная задача формулируется.
Нет, ты не так понял, у меня есть массив char
Код: plaintext
1.
2.
char mas[ 32 ]
memset(mas, 0 , 32 );
char nol = '0';
требуется сделать типа
Код: plaintext
strncat(mas,nol, 1 )
, только не к mas "прибавлять" nol, а к nol "прибавлять" mas. Извиняюсь за свой "нерусский".
...
Рейтинг: 0 / 0
02.02.2007, 14:19
    #34302384
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Т.е. тебе надо к mas дописать спереди (т.е. слева) нолик?
...
Рейтинг: 0 / 0
02.02.2007, 14:32
    #34302443
кексик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
HryuckinnenТ.е. тебе надо к mas дописать спереди (т.е. слева) нолик? Ага
...
Рейтинг: 0 / 0
02.02.2007, 14:58
    #34302565
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Ну я бы так сделал:
Код: 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.
//---------------------------------------------------------------------------
#include <stdio.h>
#include <mem.h>
#include <stdlib.h>
#include <string.h>
//---------------------------------------------------------------------------

char *c;

int main(int argc, char* argv[])
{
        //Выделяем память под строку
	c = (char*) calloc ( 256 , sizeof (char));
        //Копируем туда начальное значение
	strcpy (c, "10101010");
	printf ("Исходная строка: %s\n", c);
        //Сдвигаем строку на 1 символ вправо
	movmem (c, c+ 1 , strlen (c)*sizeof (char));
        //Записываем в 1-й символ нолик
	strnset (c, '0',  1 );
	printf ("Полученная строка: %s\n", c);
	//Освобождаем память
        free (c);
        return  0 ;
}
//---------------------------------------------------------------------------
...
Рейтинг: 0 / 0
02.02.2007, 14:59
    #34302569
кексик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Была не была
Код: 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.
#include <conio.h>
#include <stdio.h>
#include <mem.h>
#include <string.h>
#pragma hdrstop
#pragma argsused
//-----------------------------------------------
void sum(char* mas, int bufflength, char* symbol){

        unsigned char* buff= new char[ 32 ];
        buff[ 0 ]='\0';
        strncat(buff,symbol, 1 );
        strncat(buff,mas, 1 );
        strncat(mas,buff, 32 );
        delete[] buff;

}
//-----------------------------------------------
int main(int argc, char* argv[])
{
        char mas[ 32 ];
        memset(mas, 0 , 32 );
        char s ='1';
        sum(mas, 1 ,&s);
        return  0 ;
}
Только здесь прибавлем не к нулю, а к единице. Так правильно?
...
Рейтинг: 0 / 0
02.02.2007, 15:17
    #34302656
кексик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
HryuckinnenНу я бы так сделал:
Код: 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.
//---------------------------------------------------------------------------
#include <stdio.h>
#include <mem.h>
#include <stdlib.h>
#include <string.h>
//---------------------------------------------------------------------------

char *c;

int main(int argc, char* argv[])
{
        //Выделяем память под строку
	c = (char*) calloc ( 256 , sizeof (char));
        //Копируем туда начальное значение
	strcpy (c, "10101010");
	printf ("Исходная строка: %s\n", c);
        //Сдвигаем строку на 1 символ вправо
	movmem (c, c+ 1 , strlen (c)*sizeof (char));
        //Записываем в 1-й символ нолик
	strnset (c, '0',  1 );
	printf ("Полученная строка: %s\n", c);
	//Освобождаем память
        free (c);
        return  0 ;
}
//---------------------------------------------------------------------------


Проблемка в том, что массив в самом начеле пуст, никаких начальных значений там нет
...
Рейтинг: 0 / 0
02.02.2007, 15:26
    #34302687
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Неправильно. У тебя функция sum () будет буфер дописывать в конец mas.
И еще. Ты на C пишешь или на C++?
Если на С, то мой тебе совет - забей на массивы char [], юзай указатели на строки (по крайней мере, завершающий 0 не надо подставлять). И еще, в C нету операторов new и delete, их Страуструп придумал.
Если на C++ (а походу у тебя Билдырь) - нафига этим вообще заморачиваться, юзай AnsiString, он поддежживает оператор +:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//---------------------------------------------------------------------------
#include <system.hpp>
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        AnsiString c = "10101010";
        c = "0" + c;
        cout << c.c_str();
        return  0 ;
}
...
Рейтинг: 0 / 0
02.02.2007, 15:28
    #34302697
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
HryuckinnenБлин, почему нет возможности редактировать пост?

Потому что, не модератор
...
Рейтинг: 0 / 0
02.02.2007, 15:30
    #34302711
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
кексик...
Проблемка в том, что массив в самом начеле пуст, никаких начальных значений там нет

Тогда тебе незачем перед массивом ставить 0, раз у тебя "не перед чем".
...
Рейтинг: 0 / 0
02.02.2007, 15:34
    #34302739
кексик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Akh кексик...
Проблемка в том, что массив в самом начеле пуст, никаких начальных значений там нет

Тогда тебе незачем перед массивом ставить 0, раз у тебя "не перед чем".
Есть цикл, в нем, при каждый итереции должен добавляться 0 или 1 к тому значению, которое получилось в предыдущей итерации. Естественно, что в первой итерации не добавляется, а присваимвается, т.к. length = 0
...
Рейтинг: 0 / 0
02.02.2007, 15:36
    #34302749
кексик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
HryuckinnenНеправильно. У тебя функция sum () будет буфер дописывать в конец mas.
И еще. Ты на C пишешь или на C++?
Если на С, то мой тебе совет - забей на массивы char [], юзай указатели на строки (по крайней мере, завершающий 0 не надо подставлять). И еще, в C нету операторов new и delete, их Страуструп придумал.
Если на C++ (а походу у тебя Билдырь) - нафига этим вообще заморачиваться, юзай AnsiString, он поддежживает оператор +:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//---------------------------------------------------------------------------
#include <system.hpp>
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        AnsiString c = "10101010";
        c = "0" + c;
        cout << c.c_str();
        return  0 ;
}


Я пишу dll на BCB6, AnsiString точно использовать нельзя, но std подключен, правда с std я практически незнаком, да и вообще в С++ на таком уровне я только неделю
...
Рейтинг: 0 / 0
02.02.2007, 15:40
    #34302776
кексик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Вообще я пытаюсь написать ByteToBin, число int перевести в двоичное(т.е. в mas[] "загнать" последовательность 0 и 1)!извиняюсь, за то, что плохо объясняюсь! И при том, это число int - цепочка из бит, длинной около 32, т.е в int-е десятизначное число.
...
Рейтинг: 0 / 0
02.02.2007, 15:41
    #34302783
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Функция lcat - дописывает к строке символ слева. Выход за границы памяти для строки не проверяет.
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
//---------------------------------------------------------------------------
#include <stdio.h>
#include <mem.h>
#include <stdlib.h>
#include <string.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
char *c;

char *lcat (char *dest, char ch) {
        if (!strlen (dest)) {
                *dest = ch;
                *(dest +  1 ) =  0 ;
        }
        else {
	        movmem (c, c+ 1 , strlen (c)*sizeof (char));
	        strnset (c, ch,  1 );
        }
        return dest;
}

int main(int argc, char* argv[])
{
        int i;
	c = (char*) calloc ( 256 , sizeof (char));
	strcpy (c, "\0");
	printf ("Start string: %s\n", c);
        for (i =  0 ; i <  32 ; i++) {
                lcat (c, '1');
        }
	printf ("End string: %s\n", c);
        free (c);
        return  0 ;
}
//---------------------------------------------------------------------------
...
Рейтинг: 0 / 0
02.02.2007, 15:44
    #34302799
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
кексик Akh кексик...
Проблемка в том, что массив в самом начеле пуст, никаких начальных значений там нет

Тогда тебе незачем перед массивом ставить 0, раз у тебя "не перед чем".
Есть цикл, в нем, при каждый итереции должен добавляться 0 или 1 к тому значению, которое получилось в предыдущей итерации. Естественно, что в первой итерации не добавляется, а присваимвается, т.к. length = 0

Самая простая с наименьшим количеством исходных данных реализация:
1) сдвинуть массив на 1 байт влево.
2) начальный байт установить в нужное значение

Как сдвинуть Hryuckinnen тебе показал. Только перед циклом установи первый элемент в '\0'
...
Рейтинг: 0 / 0
02.02.2007, 15:47
    #34302821
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
Установка первого элемента в '\0' не поможет, т.к. strnset copies the character ch into the first n bytes of the string s. If n > strlen(s), then strlen(s) replaces n.
Правильно см. 1 пост выше, функция lcat ()
...
Рейтинг: 0 / 0
02.02.2007, 15:50
    #34302836
кексик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
А есть какая нить стандартная функция возведения числа в степень, а тоя уже до ручки....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
int power(int sym,int step)
{
 if (step<= 32 ){
         for (int x =  0 ; x<step;x++)
               sym*=sym;
         if (step =  0 ) return   1 ;
         else return sym;
 }
 else return  0 ;
}
...
Рейтинг: 0 / 0
02.02.2007, 15:50
    #34302837
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
HryuckinnenУстановка первого элемента в '\0' не поможет, т.к. strnset copies the character ch into the first n bytes of the string s. If n > strlen(s), then strlen(s) replaces n.
Правильно см. 1 пост выше, функция lcat ()

Поможет, ибо функция strlen вычисляя длину останавливается на нуле.

Единственное, что забыл добавить, это к размеру надо будет прибавить 1

Код: plaintext
1.
movmem (c, c+ 1 , (strlen (c)+ 1 )*sizeof (char));
...
Рейтинг: 0 / 0
02.02.2007, 15:52
    #34302847
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
кексикА есть какая нить стандартная функция возведения числа в степень

pow
...
Рейтинг: 0 / 0
02.02.2007, 15:56
    #34302867
Hryuckinnen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
printf unsigned int
автор
Единственное, что забыл добавить, это к размеру надо будет прибавить 1

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


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