Обсуждаем контроллеры компании Atmel.
Ответить

Re: преобразование типа char в long int

Ср мар 03, 2021 11:33:55

Чем не нравится long int? А вообще если нужны чары, то делай просто:

Код:
#pragma pack(push, 1)
union char_to_long {
  struct {
    char c1;
    char c2;
    char c3;
    char c4;
  } chars;
  long int value;
}
#pragma pack(pop)

И работай с этим как с отдельными символами, так и целиком с числом. Инкрементишь число, читаешь символы. Поля структуры ссылаются на один кусок памяти.

Re: преобразование типа char в long int

Пт мар 05, 2021 11:48:49

Некоторые размышления с точки зрения адуринки...
https://radiokot.ru/forum/viewtopic.php ... 6#p3991986
:roll:

Re: преобразование типа char в long int

Ср мар 17, 2021 20:03:11

Всем привет. Скажите как преобразовать тип данных char в long int?

вот пример:
Код:
#include <tiny2313a.h>
volatile char counter=0;


суть такова: переменную "counter" можно было бы инкрементировать до 200000.


1. Открыть исходный текст программы в текстовом редакторе.
2. Исправить тип в объявлении переменной с `char` на `long int`.
3. Заодно исправить грубую ошибку с типом возвращаемого значения функции `main`: не `void`, а `int`.
4. Сохранить исходный текст программы
5. Перекомпилировать программу
6. Готово!

Никакого другого способа, чтобы "можно было бы инкрементировать до 200000", нет и быть не может.

Re: преобразование типа char в long int

Ср мар 17, 2021 20:49:49

KorbenDallas писал(а):3. Заодно исправить грубую ошибку с типом возвращаемого значения функции `main`: не `void`, а `int`.
Ух ты, как на летел то, а не что, если в cvavr пишется именно void main(void)?
KorbenDallas писал(а):6. Готово!
А что, если есть какая-то функция, которая принимает тип char, знаковый тип, а теперь попробуйте затрамбовать ваш long int в эту функцию и желательно за один заход, учитывая знак (условие, функцию нельзя переписывать)?

Re: преобразование типа char в long int

Ср мар 17, 2021 21:01:25

а не что, если в cvavr пишется именно void main(void)?


Кем "пишется"? В cvavr, как и везде, пишется именно `int main`? А то, что какой-то компилятор традиционно закрывает глаза на `void main` не является поводом этим пользоваться. Зачем?

А что, если есть какая-то функция...


Всякие "а что если" к данному вопросу никакого отношения не имеют.

которая принимает тип char, знаковый тип, а теперь попробуйте затрамбовать ваш long int в эту функцию и желательно за один заход,


Никто даже и пытаться не будет заниматься подобной бессмыслицей. Если функция принимает тип char, то она принимает тип char. Ни о чем другой речи и быть не может. (По-прежнему, однако, не ясно, что это делает в этой теме и какое отношение имеет к заданному вопросу.)

Re: преобразование типа char в long int

Ср мар 17, 2021 22:04:16

KorbenDallas писал(а):Если функция принимает тип char, то она принимает тип char. Ни о чем другой речи и быть не может. (По-прежнему, однако, не ясно, что это делает в этой теме и какое отношение имеет к заданному вопросу.)
вам пытались указать на то, что изменение типа переменной недостаточно, потому как переменная нового типа, переданная в неизмененную функцию (вы ведь не предлагали изменить исходник где-то еще), не даст никакого видимого результата - в функцию, которая ждет char даже из переменной long int больше 255 передать не выйдет.

короче, ваш совет - в топку: он хоть и простой, как три копейки, но и стоит не больше.

Re: преобразование типа char в long int

Ср мар 17, 2021 23:29:37

вам пытались указать на то, что изменение типа переменной недостаточно, потому как переменная нового типа, переданная в неизмененную функцию (вы ведь не предлагали изменить исходник где-то еще), не даст никакого видимого результата - в функцию, которая ждет char даже из переменной long int больше 255 передать не выйдет.


Нет, конечно. Не нужно выдумывать сущности, если единственной их целью является раздувание флуда в форуме. Внимательно читайте вопрос и старайтесь не выходить за рамки топика. Никакая "передача в функцию" в этой теме не участвует и никого тут не интересует. Тот кто "пытался указать" - он ошибся и ляпнул не подумав. Он уже и сам понял.

короче, ваш совет - в топку: он хоть и простой, как три копейки, но и стоит не больше.


Мой "совет" - единственно возможный ответ на поставленный вопрос, даже (!) если принимать во внимание некие выдуманные "функции". Поэтому не "в топку", а совсем наоброт: своим ответом выше я тему исчерпал и закрыл. Никаких других вариантов тут не будет.

Что, собственно, было понятно с самого начала, до моего появления в теме, но вот умудрились же на ровном месте нафлудить на две страницы белиберды...

Re: преобразование типа char в long int

Чт мар 18, 2021 08:06:10

KorbenDallas писал(а):Мой "совет" - единственно возможный ответ на поставленный вопрос, даже (!) если принимать во внимание некие выдуманные "функции".
вас совет из категории "не перебегай ЗДЕСЬ через дорогу - это опасно", хотя на самом деле правильный совет слово "здесь" должен исключить. а так да, в конкретно этом случае по-вашему сделать можно. но наивно полагать, что это чему-либо кого-либо может научить, т.е. исключить повторение проблемы в будущем.

и, кстати, если принимать во внимание некие выдуманные функции, то ваш совет красиво демонстрирует свою фтопочную сущность:
Код:
char var;
void foo(char x){
  printf("%d", x);
}

int main(void){
  var = 1;
  while(var++) foo(var);
}
по вашему совету изменение типа переменной var никак не изменит выводимые числа - они как были в пределах 0-255, так и останутся, хотя изменит их количество . но я мог бы этого и не говорить...

Re: преобразование типа char в long int

Чт мар 18, 2021 10:54:03

:shock:

Мне кажется, народ, что я разговариваю с софтверным ботом: он просто непрерывно дылдонит одно и то же по кругу из сообщения в сообщение, не обращая ни на что внимания.

Re: преобразование типа char в long int

Чт мар 18, 2021 11:59:50

KorbenDallas писал(а):непрерывно дылдонит одно и то же по кругу из сообщения в сообщение
потому что истина не должна меняться от сообщения к сообщению :) если кому-то она не видна сразу, приходится повторять до просветления :)))
Ответить