На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Преобразование переменных , DWORD в char* или char
    Какая функция преобразовывает DWORD в char* или char?
      Я так понимаю, что тебе нужно сюда.
      Если нет, то сформулируй подробнее...
        Цитата (DiMidRoLL @ 23.11.03, 17:50)
        Какая функция преобразовывает DWORD в char* или char?

        Вообще-то никакая.

        Для начала определимся, что такое DWORD.
        Под Win32 это typedef на unsigned long

        Как гласит стандарт (4/1) для встроенных типов существуют стандартные преобразования.

        Таким образом, преобразование unsigned long к char происходит неявно, без лишних телодвижений:

        unsigned long ul = 1;
        char c = ul;
        При этом происходит integral conversion, последствия которого, в общем случае, inplementation defined. Для случая, когда sizeof( unsigned long ) == 4, а char - беззнаковый, будет происходить обрезание битовой последовательности исходного значения (4.7/2). (для платформы x86 сохранятся только младшие 8 бит: 0x1234 -> 0x34 ). Если же char знаковый, то, как сказано в 4.7/3, результат inplementation defined. В нашем случае мы получим такое же обрезание. (0x1234 -> 0x34)

        Стандартного преобразования DWORD к указателю char* (integral type к pointer type) нет.
        Это вообще небезопасная штука. Поэтому, если очень нужно, то следуется воспользоваться явным преобразованием, которое может иметь три формы:

        1. С++ cast
        char* pc = reinterpret_cast< char* >( ul );


        2. functional notation
        имеет вид T( x1, x2, ... ) -- здесь не прокатит, так как у нас T это char* и запись char*( ul ) ошибочна.

        3. cast notation ( также известен как C-style )
        char* pc = (char*)ul;


        Лучше таких преобразований вообще не делать: легко наступить на грабли.
        Но если есть 100% уверенность, что sizeof( char* ) == sizeof( DWORD ), а само значение DWORD является валидным указателем, тогда можно, только осторожно, с пониманием того, что делаешь.
        Причем лучше пользоваться reinterpret_cast.


        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0156 ]   [ 15 queries used ]   [ Generated: 19.05.24, 14:29 GMT ]