Сап двач, тематика мертва, мне больше негде спросить, может тут есть мамкины погромисты.
Пишу программу на С++ для мк Atmega8. Мне надо перевести unsigned int 32 бита в массив char. Я использовал функцию sprintf, и я никак не могу перевести число больше чем 65535, любое число которое больше 65535 превращается в рандомный бред, в отрицательные числа и тд. Вот код:
>>255655846 Короче если ты тупой - ты пытаешься засунуть больше чем помещается в массив, числа меньше 65535 приводятся к 16 битному интеджеру, а остальные нет, вот и вылетает хуйня эта.
>>255654643 (OP) Ты где-то проебался с signed/unsigned инт, посмотри дефолтные инициализации что объявляют и документацию метода. Была подобная хуйня в жабе, так что конкретно чё делать не скажу
Окей дегенераты, даю вам место в памяти, ровно 16 байт(128 бит) запишите как мне туда число 4,294,967,293 которое весит ровно 4 байта(32 бит), то есть вам нужно получить 10 восьмибитных чисел, каждое из которых будет равнятся одному символу ASCII по весу. Битовые операции разрешены, жду функцию, вернусь через пол часа
>>255656980 Ты еблан? В чем сука проблема засунуть 10 байтов в 16 байтовый массив? >о есть вам нужно получить 10 восьмибитных чисел, каждое из которых будет равнятся одному символу ASCII по вес 8битове что угодно по определению равняется весу ASCII
>>255654643 (OP) >>255656249 >char Str[16]; О боже мой. Переведи число 65535 в двоичный код и посчитай сколько бит выйдет. Переведи любое число которое больше 65535 в двоичный код и посчитай сколько бит выйдет. Пиши char Str[32];
>>255654643 (OP) Пробуй sprintf на itoa поменять. Вообще ты уверен что проблема именно в этом? ты дебажил это говно или просто выводишь? Если последнее уверен что проблема не в том что функции вывода нормально все обрабатывается?
Эй, долбаеееб, у тебя таймер 16 бит, после перемножений выходит за рамки и обрубленный результат пишется в uint32_t, далее ты его переводишь. Вбей константу, не забудь в конце L, чтобы был не просто int
>>255654643 (OP) Найс тут погромисты 300кк обсуждают как перевести число в строку, от флорентины мозги скукожились? Если нужно получить именно байтовое представление числа (т.е. как оно в памяти хранится), то юзаем memcpy(Str, &Time, 4)
Если просто в текстовый формат, то триллион вариантов (бтв, если пишите на с++ - юзайте string, символьные массивы - это С строки, а не с++) 1. to_string(Time).c_str() 2. itoa_s(Time, Str, 16, 10) 3. sprintf(Str, "%u", Time) 4. sstringstream stream; stream << Time; stream >> Str;
>>255654643 (OP) Какую библиотеку используешь для sprintf? Проверь чтобе спеки для компилятора и для линкера правильные стояли. Ну и процессор разумеется.
>>255654643 (OP) Во-первых, это С, не С++. Во-вторых, у тебя массив из 16 элементов типа char, а не 16 байт или чего ты там ожидал. В-третьих, sprintf работает правильно, записывает по адресу Str (начало массива) значение. Модификатор тут какую-то волшебную конвертацию не выполняет. Пользуйся функциями типа itoa, как уже было сказано.
>>255665688 Какой ещё размер числа? char itoa ( int value, char str, int base ); Целое значение, указатель на строку, основание системы счисления (2 для бинарной, 10 для десятеричной и т.д.)
Пишу программу на С++ для хуйни . Мне надо перевести хуйню хуйни 32 бита в хуйнюхуйни. Я использовал функцию fghfdukhsjfvbhrdfgw , и я никак не мог хуйнуть число больше чем 65535, любое число которое больше 65535 превращается в рандомный бред, в отрицательные числа и тд. Вот код: данные удалены данные удалены данные удалены данные удалены