当您将有符号整数传递给需要无符号整数以进行过滤/混合的函数时,会发生什么?

问题描述 投票:0回答:1

我需要调整一些图像的大小,我使用的库是 stb,免费的仅头文件 C 库,它具有

uint8
uint16
uint32
float
的函数。我有一些符号为 int16 的图像,其值范围从负到正。如果我通过编译器显式或隐式地将这些有符号整数强制转换为无符号整数,这些值会发生什么?我猜它会彻底崩溃。因此,我是否必须创建一个新的缓冲区,将它们转换为
float
,并调用
float
函数,然后将这些
float
值转换回
int16
?有没有更好的办法呢?

c++ c unsigned-integer
1个回答
0
投票

如果将

int16_s
数组传递给需要
uint16_t
数组的函数,并使用
(uint16_t *)
强制转换来消除编译器警告,则代码是否会执行或 break 取决于它如何处理范围 32768 到 65535。数组中的任何负条目都将被读取为偏移量 65536 的大正值,因此在
0
处有很强的不连续性。

根据filter中实现的实际算法,效果范围从正常意外,包括令人惊讶怪异迷幻等。

© www.soinside.com 2019 - 2024. All rights reserved.