【发布时间】:2020-08-19 12:59:55
【问题描述】:
我想打印结构变量的成员元素的地址。当我尝试编译这个程序时,它给了我错误(错误:从'uint8_t * {aka unsigned char *}'转换为'unsigned int'失去精度[-fpermissive])。我正在使用https://www.onlinegdb.com/online_c++_compiler。注意:我使用的是 unsigned(ptr) 否则它会给出一些 ASCII 字符。(如果我定义了指针变量 uint16_t ptr; ptr = (uint16_t)&data; 那么它也适用,但不适用于 uint8_t。)
#include <iostream>
using namespace std;
struct DataSet
{
char data1;
int data2;
char data3;
short data4;
};
int main(void)
{
struct DataSet data;
data.data1 = 0x11;
data.data2 = 0XFFFFEEEE;
data.data3 = 0x22;
data.data4 = 0xABCD;
uint8_t *ptr;
ptr = (uint8_t*)&data;
uint32_t totalSize = sizeof(struct DataSet);
for(uint32_t i = 0 ; i < totalSize ; i++)
{
cout<<hex<<unsigned(ptr)<<endl; // Here i get error.So how can i print these addresses using uint8_t.
ptr++;
}
}
【问题讨论】:
-
您好汗,您能否为您的问题添加更多详细信息?例如,给出错误的确切行,您使用的编译器等。另外我建议在标签列表中添加 c++,因为它会使使用的语言更加明显
-
std::cout有一个打印void*的重载,所以你应该转换到那个 -
解决转换问题后,您的代码将打印结构中每个字节的地址,而不仅仅是每个元素的首地址。
标签: c++ pointers struct unsigned uint8t