es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Enviar número a través de netcat

Quiero enviar un número único a través de netcat. No quiero enviar la representación ASCII del número, sino la versión binaria del número (uint8, int32, etc.). Tengo un puerto UDP abierto en Matlab que está esperando recibir el número. El objeto dsp.UDPReceiver de Matlab solo puede aceptar [‘uint8’ (predeterminado) | ‘double’ | ‘single’ | ‘int8’ | ‘int16’ | ‘uint16’ | ‘int32’ | ‘uint32’ | ‘logical’]. FYI, estoy enviando enteros a través de UDP a un proceso para controlar alguna acción dentro del mismo.

Originalmente intenté:

echo 5 | netcat -u localhost 12345

pero el receptor (en Matlab) imprime “ans = uint8 53” porque la salida de echo es la cadena y no la representación binaria del número 5. Intenté usar bc de esta manera:

echo “obase=2;5” | bc -l | netcat -u localhost 12345

pero obtengo el resultado “ans = uint8 49” porque bc está devolviendo la versión ASCII del binario en lugar de los propios bits.

¿Cómo puedo enviar un número único a través de netcat?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puedes usar la opción -i en netcat para especificar el formato de entrada. En este caso, -i debería establecerse en binary.

    Prueba el siguiente comando:

    echo -n -e '\x05\0\0\0' | nc -u -i binary localhost 12345
    

    Esto enviará el número 5 como un entero de 32 bits en formato binario (poco endian) a través de UDP al puerto especificado. La opción -n se utiliza para evitar que echo agregue un carácter de nueva línea al final de la salida, y -e se utiliza para habilitar la interpretación de las secuencias de escape de barra invertida (en este caso, \x05 representa el valor de byte 5 en hexadecimal).

Comments are closed.