我正在计算一些数字(在0到255之间),我想用C语言将它们存储在C中的char
数组中。
这样做有什么好办法吗?
int b = (int)(*pixelA.pixel_b * (1-w) * (1-h) +
*pixelB.pixel_b * (w) * (1-h) +
*pixelC.pixel_b * (1-w) * (h) +
*pixelD.pixel_b * (w*h));
modified_Frame[k] = (char)b;
这就是我的目标,如果(char)
意味着它取了b
的值,并将ASCII等价物写入数组。
我尝试使用两个指针(希望C会自动执行),如下所示:
int *pb = &b;
modified_Frame[k] = *pb;
使用b
的字符而不是int
;然而,它似乎只是发回块数据,所以我猜它不起作用,我打算如何。
非常感谢任何想法。
编辑以提供更多信息:
我正在读取一个字节数组,将其保存到char数组,然后尝试对其执行一些双线性插值,然后再发送修改后的版本。下面的代码显示了大部分过程。
当我说ASCII等价时,这是因为它们是字节,所以它可以在0-255之间变化,而且似乎是从一点点玩起来的ASCII等价物(例如用'z'填充数组导致了发送的价值为122。
n = read(conn_desc, &framebuff[ntotal], incomingframesize-ntotal);
char modified_Frame[((incomingframesize*4)-(54*3))];
for (i=0;i<newYSize;i++)
{
y = (int)(y_ratio * i);
for (j=0;j<newXSize;j++)
{
x = (int)(x_ratio * j);
w = (x_ratio * j) - x;
h = (y_ratio * i) - y;
pixelA.pixel_b = &framebuff[GET_PIXEL_B(x,y)];
pixelA.pixel_g = &framebuff[GET_PIXEL_G(x,y)];
pixelA.pixel_r = &framebuff[GET_PIXEL_R(x,y)];
pixelB.pixel_b = &framebuff[GET_PIXEL_B(x+1,y)];
pixelB.pixel_g = &framebuff[GET_PIXEL_G(x+1,y)];
pixelB.pixel_r = &framebuff[GET_PIXEL_R(x+1,y)];
pixelC.pixel_b = &framebuff[GET_PIXEL_B(x,y+1)];
pixelC.pixel_g = &framebuff[GET_PIXEL_G(x,y+1)];
pixelC.pixel_r = &framebuff[GET_PIXEL_R(x,y+1)];
pixelD.pixel_b = &framebuff[GET_PIXEL_B(x+1,y+1)];
pixelD.pixel_g = &framebuff[GET_PIXEL_G(x+1,y+1)];
pixelD.pixel_r = &framebuff[GET_PIXEL_R(x+1,y+1)];
int r = (int)(*pixelA.pixel_r * (1-w) * (1-h) + *pixelB.pixel_r * (w) * (1-h) + *pixelC.pixel_r * (1-w) * (h) + *pixelD.pixel_r * (w*h));
int g = (int)(*pixelA.pixel_g * (1-w) * (1-h) + *pixelB.pixel_g * (w) * (1-h) + *pixelC.pixel_g * (1-w) * (h) + *pixelD.pixel_g * (w*h));
int b = (int)(*pixelA.pixel_b * (1-w) * (1-h) + *pixelB.pixel_b * (w) * (1-h) + *pixelC.pixel_b * (1-w) * (h) + *pixelD.pixel_b * (w*h));
modified_Frame[k] = b;
k++;
modified_Frame[k] = g;
k++;
modified_Frame[k] = r;
k++;
}
}
这是尝试'翻译'我曾经工作过的C#算法。
答案 0 :(得分:0)
perhaps the following would work for you.
int main()
{
int myint = 25; //could actually be any int value 0...255
char mychar;
mychar = (char)(myint&0xFF);
return (int)mychar;
}