LINUX.ORG.RU

Int to char conversion


0

1

Привет. Есть такие переменные:

unsigned int a = 0xffaa99;
unsigned char* b;
Безопасно ли делать так:
b = (unsigned char *) &a;

★★★★★

Последнее исправление: UVV (всего исправлений: 2)

Не совсем ясно, чего именно вы хотите добиться этим действием.

twosev ★★
()

Когда работают с арифметикой указателей, достаточно часто так делают. Вопрос только зачем ради одного целого числа городить подобное.

dn2010 ★★★★★
()

Если не использовать указатель за пределами функции, в которой объявленна unsigned int a, и внимательно следить за размером элемента памяти (вспомните про разные архитектуры), то это допустимо. Только вот не очень понятно, зачем.

anonymous
()
Ответ на: комментарий от dn2010

Есть функция, которая принимает unsigned char*, а затем работает с октетами. Мне нужно передать туда 3 октета. Или всё-таки лучше передать их туда по одному

(a >> 16) & 0xff
и т.д.

UVV ★★★★★
() автор топика

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

nu11 ★★★★★
()
Ответ на: комментарий от hdfan2

Всё, понял. Всем спасибо, буду по октетам делать.

UVV ★★★★★
() автор топика

Мне почему-то кажется, что переменная «a» должна быть не int, а чем-то другим...

Deleted
()
Ответ на: комментарий от Deleted

>Мне почему-то кажется, что переменная «a» должна быть не int, а чем-то другим...

Ну это же не TurboC 2.0 под DOSом. Туда вполне цифирька должна влезть на 32битной системе.

dn2010 ★★★★★
()
Ответ на: комментарий от Jetty

Знаешь, проект, в которым я сейчас работаю, начинали писать ещё в Досе. А не далее как на этой неделе я участвовал в его портировании на IBM system P. И нашёл у себя же несколько глюков, связанных другим порядком байтов. Так что не думать о таких вещах можно лишь при написании совершенно ненужных программ. Кроме того, это стиль, привычка делать всё правильно. Не понадобится сейчас - поможет в другом, более крупном проекте.

hdfan2
()
Ответ на: комментарий от Macil

Действительно сильно распостраненные платформы... лол :)
Действительно каждый второй, а то и первый каждый день пришет софт под мипс.

Jetty ★★★★★
()
Ответ на: комментарий от hdfan2

> И нашёл у себя же несколько глюков, связанных другим порядком байтов.

Тоесть ты зная о эндианах сознательно игнорировал, а когда пришел момент легко исправил? :) Браво ) Думаешь посля этого в пределах одной платформы будет опасным такого рода операция?

Кроме того, это стиль, привычка делать всё правильно.


Вопрос лишь в нужности и наличию здравого смысла при использовании этого... Учитывая что 90% низкоуровневых программеров сидят на х86 под виндой/линуксом обсуждать вопрос крайней необходимости мне видится бесмысленным... Да учитывать при портировании надо. А так.... нафик не нужно :)

З.Ы. Большинство ембедед платформ обладают встроеным ВМ, и им не приходится использовать подобные конструкции...

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

низкоуровневый != асм и т.п.... имлся в виду С

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

> Действительно каждый второй, а то и первый каждый день пришет софт под мипс.

Идиот, писать софт общего назначения «под платформу» - это очень убого и недальновидно. Особенно сейчас, когда популярны всякие маемо да ведроиды. То ли еще будет.

anonymous
()
Ответ на: комментарий от Jetty

а когда пришел момент легко исправил? :)

Ещё раз: начинало всё это писАться на Досе, и, естественно, только для писюков. Ни о каких других платформах речь даже и не шла. Я тогда даже и не знал, как нужно писАть платформо-независимый код :-)

а когда пришел момент легко исправил? :)

В том то и дело, что очень даже нелегко. Такие баги, как правило, ОЧЕНЬ трудно вылавливать, т.к. частенько проявляются очень далеко от того места, где произошли. Одну почти целый ловил.

Вопрос лишь в нужности и наличию здравого смысла при использовании этого... Учитывая что 90% низкоуровневых программеров сидят на х86 под виндой/линуксом обсуждать вопрос крайней необходимости мне видится бесмысленным...

А несколько лет назад 99%. А очень скоро попрут дешёвые и малопотребляющие неттопы, лаптопы, планшеты и прочее на ARM'ах. И тогда тебе нужно будет или чистить свою программу от платформо-зависимых глюков, громко при этом матерясь (а это я обещаю по своему опыту), или выбрасывать её на помойку.

Да, и напоследок: строка «Навык написания платформо-независимого кода» очень красиво смотрится в резюме :-)))

hdfan2
()
Ответ на: комментарий от anonymous

Ок, расскажешь это индусам которые пишут ИОС, а так же Джуни-перцам, которые пишут ДжунОС, а так же гуглам которые пишут ГуглоОС, а так же еще туевой туче пацанов которые писали/пишут прошивки для контроллеров :)

Если вы настолько глупы, что не понимаете что софт для «всякие маемо да ведроиды» пишется исключительно на языках высокого уровня. А те кто пишут ВМы и всякие РТЕ плевали на кросплатформенность, так как они точат _ПОД_ПЛАТФОРМУ_

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

SPARC == широко-используемые

браво маэстро :)


Не знаю насчёт широко, знаю только, что продукт, над которым я работаю, выпускается и под sparc.

UVV ★★★★★
() автор топика
Ответ на: комментарий от hdfan2

> А очень скоро попрут дешёвые и малопотребляющие неттопы, лаптопы, планшеты и прочее на ARM'ах.

Ага, и все начнут писать на асме/С/С++ .... не смешите меня... все будет писаться(как и сейчас пишется) на всяких джавах и подобных высокоуровневыъ клонах....


Про резюме +1... Это надо знать и уметь :)

Jetty ★★★★★
()
Ответ на: комментарий от UVV

Вы отвечали на пост с вопросом цитирую: «назовите мне широко-используемые big-endian платформы»...
В чем же смысл вашего ответа ?????? Я могу вспомнить лабы в универе, где был старый убитый чемоданчик-эвм который был кстати 16-ти разрядный и биг-ендиан :)... Так что же с этого ?
Ваш ответ невалиден.... спарк не является «широко-используемая big-endian платформа».
Fail.

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

Кто запрещает то, бери и вспоминай.
Смысл моего ответа в том, что здравый смысл в написании переносимого кода таки есть. Хотя тебе это почему-то видится бессмысленным...
И да, троллят в другом разделе этого форума.

UVV ★★★★★
() автор топика
Ответ на: комментарий от Jetty

Ок, расскажешь это индусам которые пишут ИОС, а так же Джуни-перцам, которые пишут ДжунОС, а так же гуглам которые пишут ГуглоОС, а так же еще туевой туче пацанов которые писали/пишут прошивки для контроллеров :)


Как ИОС и ДжунОС относятся к переносимости кода??
И как микроконтроллеры относятся к переносимости кода.
Ты немного путаешь системный код и код приложений.

UVV ★★★★★
() автор топика
Ответ на: комментарий от Jetty

Если вы настолько глупы, что не понимаете что софт для «всякие маемо да ведроиды» пишется исключительно на языках высокого уровня.

маемо

высокого уровня

Да что вы говорите

Dudraug ★★★★★
()
Ответ на: комментарий от Jetty

Ага, и все начнут писать на асме/С/С++ .... не смешите меня... все будет писаться(как и сейчас пишется) на всяких джавах и подобных высокоуровневыъ клонах....

Meego - qt/c++, samsung bada - c++, ios - objc, maemo - gtk/c.

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

Простите, и в какой Ж эти ваши Meego maemo и бада ? :) Тот же ведроид с их концепцией «склей апликуху за 5 сек» давно их вздрючил :)

Jetty ★★★★★
()
Ответ на: комментарий от UVV

>Есть функция, которая принимает unsigned char*, а затем работает с октетами.

Нужно фиксировать порядок байт.

linuxfan
()
Ответ на: комментарий от Dudraug

Сколько строк «переносимого» кода написали лично вы из ИОСа который пыпчит тока на мипсе ?
Ок... Как вы думаете, сколько строк «переносимого кода» есть в сорцах ИОСа ? :)

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

Сколько переносимого софта в линуксе? Но это не мешает ему работать на огромном числе платформ. Завязывай говорить чушь.

Dudraug ★★★★★
()
Ответ на: комментарий от Jetty

>Действительно сильно распостраненные платформы

ты даже не знаешь, что на десктопах мир не заканчивается?

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.