【发布时间】:2018-08-28 12:50:16
【问题描述】:
假设我有一些数据(例如代表灰度图像像素的数字)从文件中读取并打包到指向 uint8_t 的指针中。
uint8_t* data = getData(readFile(filePath));
如果我真正理解了什么是 uint8_t 指针,它就像一个 unsigned char 数组(uint8_t 映射到 unsigned char),换句话说,它是一个指向 unsigned char 数组第一个元素的指针。它是否正确?
我的问题是:
1) 如何在 c++ 中打印值数据点?
我在C 中读到它可以像这样printf(*data) 或
printf( data[0] )。见Print out the value uint8_t *
但是如何在 C++ 中做到这一点?
2) 有没有办法迭代(在循环中)指向的值数据点? 类似:
for(auto i=0; i< data.size; i++) {
auto d = data[i];
}
【问题讨论】:
-
data指向的数据是否指向一个以空字符结尾的字节串?而且你显然认为它可以用 C 打印的方式也是错误的。 -
另外,指针是指向某个位置的指针,仅此而已。没有与指针关联的数据的大小或长度的概念。如果你有一个指向第一个元素的指针,并且需要遍历一组连续的元素,那么你需要从某个地方显式地获取大小。
-
在读取文件功能中,您还应该跟踪从文件中读取的字节数。假设您将字节数存储在 cnt 变量中,您可以编写一个循环,如
for (size_t i = 0; i < cnt; i++) data[i]; -
@Someprogrammerdude 关于它是如何在 C 中完成的我没有尝试过,但根据 stackoverflow.com/questions/31937276/… 应该是这样的
-
printf(data[0])与printf("%d", data[0])非常不同
标签: c++ pointers unsigned-char