int16_t
сохраняет числовое значение со знаком, используя 16 бит (от -32 768 до 32 767).
uint8_t
сохраняет числовое значение без знака, используя 8 бит (от 0 до 255).
Если вы уверены, что ваше значение int16_t
вписывается в uint8_t
после изменения знака, вы можете просто присвоить его:
int16_t firstVal = -76;
uint8_t secondVal = -firstVal;
Теперь, если вам нужен указатель на второе значение, вы можете простосоздать это.Вы не можете указать прямо на firstVal
, потому что вам нужно сохранить измененное значение.
uint8_t* secondValPointer = &secondVal;
Этот uint8_t*
может интерпретироваться как указатель на символ в вашей библиотеке.Обычно для этой цели следует использовать символ (также 8 бит, но это реализация, определенная, если она подписана или без знака ).Вы можете привести этот указатель к c har*
, хотя вам нужно указать компилятору, что вы хотите привести между указателями, используя reinterpret_cast:
char *secondValAsChar = reinterpret_cast<char*>(secondValPointer);
Теперь вы можете рассматривать этот указатель как указатель на символ.Например, следующий код выведет «L», потому что ASCII-код для L - 76:
std::cout << *secondValAsChar << std::endl;
Однако вы должны быть очень осторожны с этим указателем, поскольку secondValAsChar не является строкой с нулевым символом в конце, поэтому вы не можетеиспользуйте старые распространенные методы, такие как strcat
.