Я работал над некоторым кодом на C, чтобы преобразовать три целых числа в их значения rgb (красный, зеленый синий), но он не работает, и я не могу понять, почему. В принципе, код читается в трех разных целых числах, используя метод getchar() (я пытаюсь использовать только getchar() и ничего больше). Вот мой код:Unsigned Int to RGB Значение в C
#include <stdio.h>
#include <string.h>
// functions
void getRGB(unsigned int x);
// input array
unsigned char data[20];
int rounds = 0;
unsigned int num1, num2, num3;
int main(void)
{
int i=0;
int c;
printf("Enter three integers between 0 and 2^32-1\n");
while((c = getchar()) != EOF)
{
if(c == '-')
{
puts("Negative numbers are NOT allowed, please try again.");
return 0;
}
while(isspace(c))
{
c=getchar();
}
while ((isdigit(c)))
{
data[i] = c;
i++;
c=getchar();
}
rounds++;
if (rounds == 1)
{
num1 = atoi(data);
memset(data, 0, 20);
i = 0;
}
else if(rounds ==2)
{
num2 = atoi(data);
memset(data, 0, 20);
i = 0;
}
else if(rounds ==3)
{
num3 = atoi(data);
break;
}
}
getRGB(num1);
getRGB(num2);
getRGB(num3);
return 0;
}
void getRGB(unsigned int x)
{
unsigned int red = (x & 0xff000000) >> 24;
unsigned int green = (x & 0x00ff0000) >> 16;
unsigned int blue = (x & 0x0000ff00) >> 8;
printf("num is %u == rgb (%u, %u, %u) \n", x, red, green, blue);
}
Любая помощь будет очень признательна, поскольку я полностью в тупике!
вместо «она не работает», говорят, что вы получаете, и что вы ожидаете –
Ты прав. Например, когда я вхожу 234, я ожидаю получить значение rgb (0, 0, 234). Вместо этого я получаю (0,0,0). – MattKos
Преобразование, которое вы предоставили, выбрасывает наименее значимые 8 бит (которые являются единственными, которые использовались в вашем примере) – SleuthEye