Python implementa cadenas RGB y genera los números de fila enteros correspondientes después de la alineación por 24 bits

Fuente de la pregunta:

2021 Byte Beat Algoritmo Post Prueba escrita

Descripción del Título:

Realice una cadena de caracteres RGB (como rgb (0, 50,255)) y emita el número de tipo Integer correspondiente después de alinear el número de 24 bits. R es alto y B es bajo.
Por ejemplo: entrada rgb (0, 50,255) y salida 13055

Ingrese una descripción:

Cadena (por ejemplo, rgb (0, 50,255))

Descripción de salida:

Número de salida (por ejemplo: 11111)

Ejemplo 1

Entrada
rgb (192, 192, 192)
salida
12632256

Código

No hay mucho que decir, vaya directamente a la
idea del código : el título requiere una conversión de alineación de 24 bits, así que pensé en convertir los números enteros correspondientes a los bits r, gy b en hexadecimales, porque el rango de valores de r, g, b es 0 -255, más de 255 también se contarán como 255. Corresponde al hexadecimal 0x00-0xff, un hexadecimal corresponde a 4 dígitos binarios y seis hexadecimales corresponden a 24 dígitos. Luego convierta el hexadecimal convertido a tipo int.
Por supuesto, también puede convertir directamente los números enteros r, gy b-bit en tres números binarios de 8 bits.

Sugerencias:
Salida formateada%%
o —— oct octal
% d —— dec decimal
% x —— hexadecimal hexadecimal

% No admite conversión binaria,

Si desea generar directamente el binario, puede usar la función de formato para lograrlo, o puede escribir una función de conversión binaria de acuerdo con sus necesidades.

def RGB_to_Int(Red,Green,Blue):
    r, g, b = (Red, Green, Blue)
    packed = int('%02x%02x%02x' % (r, g, b), 16)
    print(packed)

if __name__ == "__main__":
    arr = input("输入数组:")
    #截取字符串
    str=arr[4:-1]
    #获取其中的数字
    str2=str.split(',')
    #把str转为int,.strip()去除字符串首尾空格
    Red=int(str2[0].strip())
    Green=int(str2[1].strip())
    Blue=int(str2[2].strip())
    #调用
    RGB_to_Int(Red,Green,Blue)

Inserte la descripción de la imagen aquí

Referencia: RGB Int a RGB-Python

Lugar fácilmente cuestionable

1. ¿Qué significa el signo de porcentaje 02x en la cadena?

1) Primero, la estructura se ajusta a la forma de salida con formato de cadena:

  • "% X% x% x"% (r, g, b)
  • Donde% x es un entero hexadecimal

2) En segundo lugar,% 02x es un complemento adicional de% x:
% como símbolo de formato para la salida formateada, se puede controlar de las siguientes formas:

  • % [(nombre)] [banderas] [ancho]. [precisión] código de tipo
  • (nombre) es el nombre;
  • las banderas pueden tener +, -, '' o 0. + Significa justificación correcta. -Indica justificado a la izquierda. '
    ' Es un espacio, lo que significa llenar un espacio en el lado izquierdo del número positivo para alinearlo con el número negativo. 0 significa utilizar relleno 0;
  • ancho representa el ancho de la pantalla;
  • precisión representa la precisión después del punto decimal;

Entonces, aquí% 02x significa un número entero hexadecimal con un ancho de 2, que no son suficientes 2 dígitos para llenar con 0.
3) Revise el "#% 02x% 02x% 02x" general, que en realidad son datos de color rgb como "# b7bb96"

Referencia: Blog de referencia

2. La diferencia entre% 02x y% 2x
1) Ancho de salida mínimo

  • Utilice un entero decimal para representar el número mínimo de dígitos de salida. Si el número real de dígitos es mayor que el ancho definido, la salida se basará en el número real de dígitos. Si el número real de dígitos es menor que el ancho definido, agregue un espacio o 0 (cuando el valor de ancho mínimo comience con 0).
  • X significa salida en forma hexadecimal
  • 02 significa que hay menos de dos dígitos y se emite 0 al frente; si hay más de dos dígitos, la salida real

Ejemplo:
printf ("% 02X", 0x345); // Imprimir: 345
printf ("% 02X", 0x6); // Imprimir: 06

  • Y si se escribe directamente como% 2x, cuando los datos tienen menos de dos dígitos, la salida real, es decir, no se emite ningún 0 adicional; si supera los dos dígitos, la salida real.

printf ("% 2X", 0x345); // Imprimir: 345
printf ("% 2X", 0x6); // Imprimir: 6

Referencia: Blog de referencia

Supongo que te gusta

Origin blog.csdn.net/zhuyin6553/article/details/109278107
Recomendado
Clasificación