Так что у меня это до сих пор:
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
int main ()
{
float f = 3.45; // just an example fp#
char* ptr = (char*)&f; // a character pointer to the first byte of the fp#?
cout << int(ptr[0]) << endl; // these lines are just to see if I get what I
cout << int(ptr[1]) << endl; // am looking for... I want ints that I can
cout << int(ptr[2]) << endl; // otherwise manipulate.
cout << int(ptr[3]) << endl;
}
the result is: -51 -52 92 64
так что -51 и -52 не находятся в байтовом диапазоне, который я ожидал бы для char... Я получил информацию из похожих вопросов, чтобы прийти к этому коду и из всех обсуждений, преобразование из char в int простое, Итак, почему отрицательные значения? Я пытаюсь посмотреть четырехбайтовое число, поэтому я бы ожидал 4 целых числа, каждый в диапазоне 0-255.
Я использую Codeblocks 13.12 с gcc 4.8.1 с опцией -std = С++ 11 на устройстве Windows 8.1.
EDIT: Таким образом, решение должно было использовать:
unsigned char* ptr = reinterpret_cast<unsigned char*>( &f );
Спасибо за все ответы.
Используйте unsigned char
для получения (гарантированных) значений без знака.
Вы получаете отрицательные значения, потому что с параметрами вашего компилятора и компилятора (да, это важно) char
является подписанным типом.
Кстати, оператор prefix +
является удобным и сжатым способом продвижения char
для int
с целью отображения числового значения.
Также, кстати, это вообще хорошая идея использовать C++ именованные слепки (reinterpret_cast
, const_cast
, static_cast
и dynamic_cast
) вместо стиля C бросает, где указатели обеспокоены. Это потому, что приведение стиля C может привести к неожиданностям, особенно когда код поддерживается и типы изменены. В этом случае вы выражаете reinterpret_cast
, так что тот, который нужно использовать, - только ради хорошей привычки.