如何获得元素的数量

时间:2013-09-23 14:10:57

标签: c++ c visual-c++

我正在用C ++开发一个应用程序,我需要知道变量元素的数量。我正在寻找如何做到这一点,但我无法找到解决方案。变量以这种方式定义:

unsigned char *values = (unsigned char *) some_function(some_parameter);
// "some_function" takes "some_parameter" and fills "values" correctly

提前感谢您提供的任何帮助。

最好的问候。

2 个答案:

答案 0 :(得分:3)

由于您告诉我们您正在使用哪个功能(FreeImage::GetBits),我们现在知道您正在查询图像的原始数据。它的大小是图像的间距和高度的乘积,如下式所示:

int size = image.GetPitch() * image.GetHeight();

这是 bytes 中的大小,这是访问char指针时的元素数。但是在这种情况下谈到“元素数量”(我们谈到一些低级内存,没有高级类型的比特流)有点误导,因为在阅读问题时,人们可能会认为这是一个更高级别的问题。 level array

如果您想知道:原始图像数据通常以大小为pitch的行排列,从左到右依次为一个像素,其中每个像素的大小可能取决于某种存储格式(例如1字节灰度,3字节RGB,每通道8位,单位位图1位,以及更多格式)。

这些行从上到下排列(在大多数情况下)或有时从下到上排列(例如,在BMP文件格式的情况下)。 pitch至少是图像的width乘以每个像素的大小,因此所有像素在这样的“扫描线”中都有空间,这就是每行图像的这种记忆的调用方式。它被四舍五入到一些对齐,因此每一行都可以从内存中的对齐地址开始,用于整个图像。未使用的空间称为“填充”并被忽略。

根据库,有时“pitch”表示内存中的“每行像素数”,而不是“每行字节数”,但在这种情况下,它已经在字节中给出了 em>所以你只需要乘以图像高度。请注意,通常高度像宽度一样填充,因为没有这样做的优势。

答案 1 :(得分:2)

在给定指向数组开头的指针的情况下,您永远无法确定地知道数组的长度。您必须将一些信息与数组一起传递。

该额外信息可能采用以下形式:

  • 指定长度的另一个返回值
  • 一个商定的编码,将长度编码到数组的开头
  • 一个商定的编码,用于标记数组的结尾(例如,字符串末尾的\0