Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

355
Vistas
¿Debo verificar endianness cuando uso System.Text.Encoding.Unicode.GetBytes(aString)?

Estoy escribiendo algo que convierte datos a byte[], transfiriéndolos a través de Internet y luego volviendo a convertirlos a lo que eran para un proyecto de juego de Unity.

Uso BitConverter para convertir int , float , etc., como muestra el siguiente ejemplo:

 float aFloat = 312321f; var bytes = BitConverter.GetBytes(aFloat); if (BitConverter.IsLittleEndian) Array.Reverse(bytes); // sending through the internet byte[] bytes = GetByteArrayFromTheInternet(); if (BitConverter.IsLittleEndian) Array.Reverse(bytes); float aFloat = BitConverter.ToSingle(bytes, 0);

Hago la verificación de endianness antes y después de enviar los datos para asegurarme de que sean iguales. ¿Necesito hacer esto para la string ?

 string aString = "testing"; var bytes = System.Text.Encoding.Unicode.GetBytes(aString); // if (BitConverter.IsLittleEndian) Array.Reverse(bytes); // Do I need this line? // sending through the internet byte[] bytes = GetByteArrayFromTheInternet(); // if (BitConverter.IsLittleEndian) Array.Reverse(bytes); // Do I need this too? string aString = System.Text.Encoding.Unicode.GetString(bytes);

¡Gracias por adelantado!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Realizo la verificación de endianess antes y después de enviar los datos para asegurarme de que sean iguales. ¿Necesito hacer esto para la cadena?

Eso depende de con quién estés hablando en la red. ¿Qué endianness están usando?

En su primer ejemplo, asume que el protocolo de red siempre envía tipos float (coma flotante de 32 bits) como big-endian. Lo cual está bien; tradicionalmente, el "orden de host de red" siempre ha sido big-endian, por lo que es una buena opción para un protocolo de red.

Pero no hay ningún requisito de que un protocolo de red cumpla con eso, ni que sea autoconsistente internamente, y no ha proporcionado ninguna información sobre qué protocolo está implementando.

Nota: por "protocolo de red", me refiero al protocolo de nivel de aplicación. Esto sería algo así como HTTP, SMTP, FTP, POP, etc. Es decir, lo que elija su aplicación para el formato de bytes en la red.

Por lo tanto, deberá consultar la especificación del protocolo que está utilizando para averiguar qué tipo de endianidad utilizan los datos codificados en Unicode (UTF16). Supongo que es big-endian, ya que sus valores float también lo son. Pero no puedo decir eso con seguridad.

Tenga en cuenta que si el protocolo de red codifica el texto como UTF16 big-endian, entonces no necesita intercambiar los bytes para cada carácter usted mismo. Simplemente use el objeto de codificación BigEndianUnicode para codificar y decodificar el texto. Se encargará de la endianness para usted.

Tenga en cuenta también que no es realmente opcional usar el codificador correcto. Todo lo que le dice el campo BitConverter.IsLittleEndian es la arquitectura actual de la CPU. Pero si el texto en el protocolo de red está codificado como big-endian, incluso si está ejecutando en una CPU big-endian, aún necesita usar la codificación BigEndianUnicode . Al igual que uno siempre decodificará de manera confiable el texto big-endian, la codificación Unicode siempre decodifica el texto como si fuera little-endian, incluso cuando se ejecuta en una CPU big-endian.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda