gpt4 book ai didi

c++ - 是否可以创建一个包含 unsigned int 的数组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:01 25 4
gpt4 key购买 nike

我目前正在尝试在数组保存 rgba 数据 (0x00000000 → 0xFFFFFFFF) 的位置创建它,当我将值设置为超过 2,147,483,647 时它会溢出,我假设是因为某些可能的转换(可能是无符号→有符号)。

这是我的代码:

int main(int argc, char* args[]) {
uint32_t *background = new uint32_t[1920*1080];

background[100] = 0xFF0000FF; //red, 4278190335
printf("%d, ", background[100]);

return 0;
}

这是输出:

-16776961

我对 C++ 还是有些陌生,所以如果我忘记了什么,请指出。

最佳答案

首先,快速说明:

uint32_t *background = new uint32_t[1920*1080];

这里,background 不是数组(在堆栈中),而是分配内存(包含数组)并保存指向第一个元素的指针。您将需要删除内存。在 C++ 中,使用 std::vector 更容易:

// at the top: #include <vector>
std::vector<uint32_t> background(1920*1080);

哪个会自动释放(所以你不用担心)。另一种选择是使用数组,但在这种情况下,最好不要使用,因为那里有相当多的内存 (8 MiB),这可能会破坏堆栈。

现在,如果你想用printf打印一个unsigned int,你需要使用%u(或% x 如果你想要它是十六进制的):

printf("%u, ", background[100]); // or...
printf("%x, ", background[100]);

但是,在您的代码中,您使用的是 uint32_t,它是固定类型。为此,您需要使用:

// at the top: #include <cinttypes>
printf("%" PRIu32 ", ", background[100]); // or...
printf("%" PRIx32 ", ", background[100]);

此外,正如@Someprogrammerdude 评论的最后一点,您可以在 C++ 中使用 std::cout 代替:

// at the top: #include <iostream>
std::cout << background[100] << std::endl; // or...
std::cout << std::hex << background[100] << std::dec << std::endl;

关于c++ - 是否可以创建一个包含 unsigned int 的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52887148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com