如何获取元素的数量

How to get the number of elements

本文关键字:元素 获取 何获取      更新时间:2023-10-16

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

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

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

此致敬意。

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

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

这是以字节为单位的大小,即访问char指针时的元素数。但是在这种情况下说"元素的数量"(我们说的是一些低级内存,没有高级类型的位流(有点误导,因为在阅读问题时,人们可能会认为它是关于更高级别的数组

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

这些行从上到下(

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

根据库的不同,有时"pitch"表示内存中的"每行像素",而不是"每行字节数",但在这种情况下,它已经以字节为单位给出,因此您只需乘以图像高度。请注意,通常高度不像宽度那样填充,因为这样做没有优势。

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

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

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