Когда вы делаете
ENVIRONMENT_STRUCT * environment_struct = new ENVIRONMENT_STRUCT();
, вы инициализируете packetSize
как {0, 0}
.Затем
*environment_struct->packetSize = 100;
превращает массив в {100, 0}
.Так как массив является массивом символов, когда вы отправляете его на cout
с
std::cout << "Packet Size: " << environment_struct->packetSize << endl;
, он обрабатывает его как c-строку и печатает содержимое строки.Поскольку вы видите d
, это означает, что ваша система использует ascii, поскольку символ 'd'
имеет целочисленное представление 100
.Чтобы увидеть 100
, вам нужно привести его к int
как
std::cout << "Packet Size: " << static_cast<int>(*environment_struct->packetSize) << endl;
Обратите внимание, что поскольку packetSize
является массивом из двух символов, вы не можете назначить одинзначение, которое занимает все это пространство.Если вы хотите это, вам нужно использовать фиксированные типы ширины, такие как
typedef struct ENVIRONMENT_STRUCT{
uint8_t packetID; // unsigned integer that is exactly 8 bits wide. Will be a compiler error if it does not exist
uint16_t packetSize; // unsigned integer that is exactly 16 bits wide. Will be a compiler error if it does not exist
};
int main()
{
ENVIRONMENT_STRUCT * environment_struct = new ENVIRONMENT_STRUCT();
environment_struct->packetSize = 100;
std::cout << "Packet Size: " << environment_struct->packetSize << std::endl;
}