我正在用C ++开发一个应用程序,我需要知道变量元素的数量。我正在寻找如何做到这一点,但我无法找到解决方案。变量以这种方式定义:
unsigned char *values = (unsigned char *) some_function(some_parameter);
// "some_function" takes "some_parameter" and fills "values" correctly
提前感谢您提供的任何帮助。
最好的问候。
答案 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
)