Странный результат с приведением типа - PullRequest
1 голос
/ 18 июля 2011

В следующей программе:

int main(){

    int i = 0x52554153;
    const char *s = reinterpret_cast<const char*>(&i);
    std::string *s1 = new std::string(s);
    std::cout<<"word is "<<*s1<<std::endl;
    return 0;
}

Я конвертирую 4-байтовое int в 4-байтовую строку "const char".Целочисленное значение, которое я использовал, - это не что иное, как набор значений ascii для строки символов "RUAS".Я ожидаю того же результата в заявлении "cout".Но это печатает "SAUR", который является точной противоположностью того, что я предоставляю.пожалуйста, объясните мне вывод.

Ответы [ 2 ]

7 голосов
/ 18 июля 2011

Это называется little-endianness - большинство процессорных архитектур хранят целочисленные значения с младшим значащим байтом первым . Кстати, конструктор string должен получить массив символов с нулевым символом в конце (так что это просто удача, что байт рядом с вашим int оказался нулевым).

5 голосов
/ 18 июля 2011

Проблема в endianness - на вашем компьютере число сохраняется с байтами, сохраненными в обратном порядке 0x53415552.

Также вы передаете адрес целочисленной переменной в конструктор std::string - это неопределенное поведение, потому что эта переменная представляет собой блок байтов, который не заканчивается нулем, и std::string конструктор принимает только строку с нулевым символом в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...