在 C 中从浮点数转换为无符号字符
Posted
技术标签:
【中文标题】在 C 中从浮点数转换为无符号字符【英文标题】:Converting from a float to an unsigned char in C 【发布时间】:2012-10-14 21:06:27 【问题描述】:我正在尝试在 0 和 1 之间的双精度和用于处理图像的无符号字符之间进行转换。
到目前为止,我正在做的是我有一个浮点数组。
float array[length*4]
其中 4 来自 RGBA 颜色方案系统。然后我试试这个:
unsigned char newArray[4*length]
for (int i=0; i<4*length; i++)
newArray[i] = 255*array[i];
for (int i=0; i<10; i++)
printf("newArray: %d", newArray[i])
并得到以下输出:
newArray: 32
newArray: 128
newArray: 131
newArray: 0
newArray: 173
newArray: 224
newArray: 56
newArray: 60
newArray: 125
newArray: 104
什么时候应该是这样的:
should be: 0
should be: 75
should be: 140
should be: 255
should be: 1
should be: 79
should be: 143
should be: 255
should be: 1
should be: 84
should be: 150
should be: 255
我试过other methods,但它们不起作用。
我的问题是:如何在浮点数和无符号字符之间进行转换?
编辑:生成正确输出的代码是这样的:
for (i=0; i<length; i++)
[[data objectAtIndex:i] getRed:&red green:&green blue:&blue alpha:&alpha];
array[i][0] = 255*red;
array[i][1] = 255*green;
array[i][2] = 255*blue;
array[i][3] = 255*alpha;
for (i=0; i<10; i++)
NSLog(@"before: %f, %f, %f, %f", array[i][0],array[i][1],array[i][2],array[i][3]);
,我所做的只是编辑输出,所以它是
1
2
3
4
而不是1,2,3,4
。
【问题讨论】:
在没有更多信息的情况下在 float 和 unsigned char 之间进行转换是没有意义的。您希望它如何转换?到整数舍入值?给一个真实的角色? 您发布的输出的输入是什么? @Dani:这些值的输入是取自 UIColor 的 RGB 值。我将所有数据都放在一个原始数组中,并尝试在float
和 unsigned char
之间进行转换以在 C 数组和 UIImage 之间进行转换。
@Joe:我希望它们是 RGB 值,int
s 介于 0 和 255 之间。
@scott:我的意思是什么输入数字产生了这个特定的输出?
【参考方案1】:
转换此代码:
for (int i=0; i<4*length; i++)
newArray[i] = 255*array[i];
到这里:
for (int i=0; i<4*length; i++)
float f = 255*array[i];
if (f < 0 || f > 255)
printf("error, array[%d]=%f, 255*array[%d]=%f\n!", i, array[i], i, f);
abort();
newArray[i] = f;
它会告诉你你的浮点数不在 0 到 1 的范围内。
【讨论】:
以上是关于在 C 中从浮点数转换为无符号字符的主要内容,如果未能解决你的问题,请参考以下文章