Sizeof(uint8_t*) is always 4?

12 浏览
0 Comments

Sizeof(uint8_t*) is always 4?

有时我会创建一个uint_8t*类型的向量,长度可能是3、4或者5个字节,但是当我使用sizeof运算符计算数组的大小时,总是得到4。我该如何解决这个问题呢?创建完数组后,我想获取它的长度。\n例如:\n

uint_8t* u8;
u8[0]=...;
u8[1]=...;

\nsizeof(u8)的结果是4,而不是2。\nsizeof(uint8_t)是1,我也尝试过使用sizeof(u8)/sizeof(u8[0]),结果还是4。

0
0 Comments

(Sizeof(uint8_t*) is always 4?)这个问题的出现的原因是因为sizeof(uint8_t*)返回的是指针的大小,对于32位架构来说通常是4字节,对于64位架构来说通常是8字节。这个大小通常不取决于底层的结构(对于uint8_t*、std::string*、long*等来说应该是相同的),尽管这并不是绝对的。

解决这个问题的方法是使用sizeof(uint8_t)来获取uint8_t的大小,因为uint8_t是一个字节大小的数据类型。

然而,如果你想知道uint8_t*指向的内存的大小,是没有办法仅通过指针来实现的。你需要手动跟踪内存的大小。通常可以通过使用std::vector<uint8_t>来代替原始指针来实现。这样你就可以通过vector.size()来获取内存的大小。

如果你需要将分配的大小传递给函数的输出指针,通常是没有办法实现的。除非这个函数有特殊的处理,比如保证大小始终相同,或者保证数组的最后一个元素为0。否则,这个函数的编写方式是非常糟糕的,你注定会失败。

0