powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / printf unsigned int
40 сообщений из 40, показаны все 2 страниц
printf unsigned int
    #34301738
кексbr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть
Код: 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
printf unsigned int
    #34302015
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
 for (int x =  0 ; x< 32  ; x++){
        printf('%d', &mas[x]);
 }
Это хотел?
...
Рейтинг: 0 / 0
printf unsigned int
    #34302024
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И не '%d', а "%d". Не поглядел сразу.
Код: plaintext
1.
2.
3.
 for (int x =  0 ; x< 32  ; x++){
        printf("%d", &mas[x]);
 }
...
Рейтинг: 0 / 0
printf unsigned int
    #34302037
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, почему нет возможности редактировать пост? Убейте два предыдущих. Я чё-то сегодня торможу. Пятница, видимо
Код: plaintext
1.
2.
3.
 for (int x =  0 ; x< 32  ; x++){
        printf("%d", mas[x]);
 }
...
Рейтинг: 0 / 0
printf unsigned int
    #34302069
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
printf unsigned int
    #34302104
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понял. Ты хочешь хранить по два символа в одном значении типа char? Так делают ассемблерные программеры под MSDOS. В си лучше так не делать, ибо нуевонафиг. Поясни, как исходная задача формулируется.
...
Рейтинг: 0 / 0
printf unsigned int
    #34302164
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
printf unsigned int
    #34302384
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. тебе надо к mas дописать спереди (т.е. слева) нолик?
...
Рейтинг: 0 / 0
printf unsigned int
    #34302443
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HryuckinnenТ.е. тебе надо к mas дописать спереди (т.е. слева) нолик? Ага
...
Рейтинг: 0 / 0
printf unsigned int
    #34302565
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
printf unsigned int
    #34302569
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Была не была
Код: 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
printf unsigned int
    #34302656
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
printf unsigned int
    #34302687
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 ;
}
...
Рейтинг: 0 / 0
printf unsigned int
    #34302697
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HryuckinnenБлин, почему нет возможности редактировать пост?

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

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

Тогда тебе незачем перед массивом ставить 0, раз у тебя "не перед чем".
Есть цикл, в нем, при каждый итереции должен добавляться 0 или 1 к тому значению, которое получилось в предыдущей итерации. Естественно, что в первой итерации не добавляется, а присваимвается, т.к. length = 0
...
Рейтинг: 0 / 0
printf unsigned int
    #34302749
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
printf unsigned int
    #34302776
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще я пытаюсь написать ByteToBin, число int перевести в двоичное(т.е. в mas[] "загнать" последовательность 0 и 1)!извиняюсь, за то, что плохо объясняюсь! И при том, это число int - цепочка из бит, длинной около 32, т.е в int-е десятизначное число.
...
Рейтинг: 0 / 0
printf unsigned int
    #34302783
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция 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
printf unsigned int
    #34302799
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кексик Akh кексик...
Проблемка в том, что массив в самом начеле пуст, никаких начальных значений там нет

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

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

Как сдвинуть Hryuckinnen тебе показал. Только перед циклом установи первый элемент в '\0'
...
Рейтинг: 0 / 0
printf unsigned int
    #34302821
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 ()
...
Рейтинг: 0 / 0
printf unsigned int
    #34302836
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А есть какая нить стандартная функция возведения числа в степень, а тоя уже до ручки....
Код: 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
printf unsigned int
    #34302837
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
printf unsigned int
    #34302847
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кексикА есть какая нить стандартная функция возведения числа в степень

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

Точно, иначе завершающий нолик не скопируется...
...
Рейтинг: 0 / 0
printf unsigned int
    #34302884
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AhkПоможет, ибо функция strlen вычисляя длину останавливается на нуле.
Пробовал, не помогает.
автор
strlen () returns number of characters in a string EXCLUDING the null terminator.

Т.е. если s = "\0", то strlen (вернет 0), а strnset заменит n на 0.
...
Рейтинг: 0 / 0
printf unsigned int
    #34302947
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HryuckinnenТ.е. если s = "\0", то strlen (вернет 0), а strnset заменит n на 0.

Т.е. если s = "\0", то strlen (вернет 0), а strnset заменит n символов на 0.
...
Рейтинг: 0 / 0
printf unsigned int
    #34302988
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кексbr пишет:

Так
> for (int x = 0; x<32 ; x++){
> printf('%d', (int)mas[x]);
> }
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
printf unsigned int
    #34303032
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Header File

string.h

Category

Memory and String Manipulation Routines, Inline Routines

Prototype

char *strnset(char *s, int ch, size_t n);

wchar_t *_wcsnset(wchar_t *s, wchar_t ch, size_t n);

unsigned char *_mbsnset(unsigned char *s, unsigned int ch, size_t n);

Description

Sets a specified number of characters in a string to a given character.

strnset copies the character ch into the first n bytes of the string s. If n > strlen(s), then strlen(s) replaces n. It stops when n characters have been set, or when a null character is found.

Return Value

Each of these functions return s.
...
Рейтинг: 0 / 0
printf unsigned int
    #34303061
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hryuckinnen...

Если ты мне хочешь что-то доказать, то сначала скажи что ты доказываешь.
...
Рейтинг: 0 / 0
printf unsigned int
    #34303109
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарисчи знатоки, аналогом дельфийской
Код: plaintext
if ((value XOR hex) < value) then
, где value и hex - Integer, будет случаем не
Код: plaintext
if ((value | value) < byte)
. Точнее меня интересует XOR(Дельфи) и | (C++) - это одно и тоже ?
...
Рейтинг: 0 / 0
printf unsigned int
    #34303116
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
if ((value XOR hex) < value) then
и
Код: plaintext
if ((value | hex) < value)
Поправочка :))
...
Рейтинг: 0 / 0
printf unsigned int
    #34303167
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XOR - это ^
| - это OR
Akh
Если ты мне хочешь что-то доказать, то сначала скажи что ты доказываешь.

Если я тебя правильно понял, ты утверждаешь, что strnset () может поместить символ в пустую строку. Из документации следует, что если строка пустая, strnset ничего не сделает. Но на самом деле я ничего не хочу доказывать, просто флудю:)
...
Рейтинг: 0 / 0
printf unsigned int
    #34303199
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, число 1234567890 в Bin займет 32 бита? Виндузовый калькулятор выдает мне
Код: plaintext
 1001001100101100000001011010010 
т.е. 31 бит, но мне кажется, что должно быть 32, и к тому же ведущие нули калькулятор не показывает, вот я и не разберусь, сколько бит должно быть
...
Рейтинг: 0 / 0
printf unsigned int
    #34303212
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В дискретной математике на таком уровне ты тоже всего неделю?:-) Компутер работает с 32-битными словами, и если что-то занимает 31 бит, оно дополняется ведущим нулем.
...
Рейтинг: 0 / 0
printf unsigned int
    #34303239
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем большое. С вашей помощью я "родил" функцию перевода любого десятичного числа (которое лежит в диапазоне int) в двоичное
...
Рейтинг: 0 / 0
printf unsigned int
    #34303253
Hryuckinnen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слава Богу!
...
Рейтинг: 0 / 0
printf unsigned int
    #34303278
кексик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HryuckinnenСлава Богу! Аминь
...
Рейтинг: 0 / 0
printf unsigned int
    #34303427
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кексикСпасибо всем большое. С вашей помощью я "родил" функцию перевода любого десятичного числа (которое лежит в диапазоне int) в двоичное

Через 3 года получишь 250 тысяч.
...
Рейтинг: 0 / 0
printf unsigned int
    #34303429
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HryuckinnenЕсли я тебя правильно понял, ты утверждаешь, что strnset () может поместить символ в пустую строку. Из документации следует, что если строка пустая, strnset ничего не сделает. Но на самом деле я ничего не хочу доказывать, просто флудю:)

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


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