elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Migrar funcion de C a C# problema con tamaño de variable 16 y 32 bits
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Migrar funcion de C a C# problema con tamaño de variable 16 y 32 bits  (Leído 2,193 veces)
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Migrar funcion de C a C# problema con tamaño de variable 16 y 32 bits
« en: 21 Marzo 2018, 22:20 pm »

Migrar una funcion de un lenguaje a otro no debería de ser problema, sin embargo estoy algo atorado con los resultado que me arroja una vez migrado.

En teoria deberia de ser el mismo resultado en ambos casos, sin embargo no es asi.

Codigo en C (Original sin depuracion)

Código
  1. #include<stdio.h>
  2.  
  3. unsigned short CRC(unsigned char *s, int len, unsigned short crcval);
  4.  
  5. int main() {
  6. unsigned char *test = "\x01\x55\x00\x00";
  7. printf("CRC: %u\n",CRC(test,4,0));
  8. return 0;
  9. }
  10.  
  11. unsigned short CRC(unsigned char *s, int len, unsigned short crcval) {
  12. register unsigned c,q;
  13. for (; len; len--) {
  14. c = *s++;
  15. q = (crcval ^ c) & 017;
  16. crcval = (crcval >> 4) ^ (q * 010201);
  17. q = (crcval ^ (c >> 4)) & 017;
  18. crcval = (crcval >> 4) ^ (q * 010201);
  19. }
  20. return (crcval);
  21. }

Codigo en C (Con depuracion)

Código
  1. #include<stdio.h>
  2.  
  3. unsigned short CRC(unsigned char *s, int len, unsigned short crcval);
  4.  
  5. int main() {
  6. unsigned char *test = "\x01\x55\x00\x00";
  7. printf("CRC: %u\n",CRC(test,4,0));
  8. return 0;
  9. }
  10.  
  11. unsigned short CRC(unsigned char *s, int len, unsigned short crcval) {
  12. register unsigned c,q;
  13. printf("Depurando CRC\n");
  14. for (; len; len--) {
  15. printf("len: %i\n",len);
  16. c = *s++;
  17. printf("c: %u\n",c);
  18. q = (crcval ^ c) & 017;
  19. printf("q: %u\n",q);
  20. crcval = (crcval >> 4) ^ (q * 010201);
  21. printf("crcval: %u\n",crcval);
  22. q = (crcval ^ (c >> 4)) & 017;
  23. printf("q: %u\n",q);
  24. crcval = (crcval >> 4) ^ (q * 010201);
  25. printf("crcval: %u\n",crcval);
  26. }
  27. return (crcval);
  28.  

Salida del codigo en C para el ejemplo Dado:

Código:
Depurando CRC
len: 4
c: 1
q: 1
crcval: 4225
q: 1
crcval: 4489
len: 3
c: 85
q: 12
crcval: 50964
q: 1
crcval: 7408
len: 2
c: 0
q: 0
crcval: 463
q: 15
crcval: 63379
len: 1
c: 0
q: 3
crcval: 16122
q: 10
crcval: 42725
CRC: 42725

Codigo en C#

Código
  1. static void Main(string[] args)
  2. {
  3. byte[] test = new byte[] { 0x01,0x55,0x00,0x00 };
  4. Console.WriteLine("CRC: "+CRC(test,test.Length,0));
  5. }
  6.  
  7. public static ushort CRC(byte[] s,int len,ushort crcval) {
  8. ulong c, q;
  9. uint i = 0;
  10. while(len > 0)
  11. {
  12. Console.WriteLine("len: "+len);
  13. c = s[i];
  14. Console.WriteLine("c: " + c);
  15. q = (crcval ^ c) & 017;
  16. Console.WriteLine("q: " + q);
  17. crcval = (ushort)(((uint)crcval >> 4) ^ (q * 010201));
  18. Console.WriteLine("crcval: " + crcval);
  19. q = (crcval ^ (c >> 4)) & 017;
  20. Console.WriteLine("q: " + q);
  21. crcval = (ushort)(((uint)crcval >> 4) ^ (q * 010201));
  22. Console.WriteLine("crcval: " + crcval);
  23. len--;
  24. i++;
  25. }
  26. return crcval;
  27. }
  28.  
  29.  

Salida del programa en C#

Código:
len: 4
c: 1
q: 1
crcval: 10201
q: 17
crcval: 42772
len: 3
c: 85
q: 1
crcval: 11688
q: 1
crcval: 9475
len: 2
c: 0
q: 1
crcval: 9609
q: 1
crcval: 9601
len: 1
c: 0
q: 1
crcval: 9601
q: 1
crcval: 9601
9601

El problema creo que se encuentra en la conversion de variables de 16 bits a 32 bits, pero e tratado de reasignar los valores con ANDS ( & 0xffff) para que queden de 16 bits y ni aun asi funciona.

Alguna ayuda.

Saludos!


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Migrar funcion de C a C# problema con tamaño de variable 16 y 32 bits
« Respuesta #1 en: 21 Marzo 2018, 22:47 pm »

el error está en como te está interpretando los numeros... tu codigo no debería ser sensible a largo (en tal caso siempre puedes usar and y recortar a 16 bits)

Código:
010201

en C se interpreta como octal y su valor decimal es 4225

esto se ve reflejado en el primer crcval impreso... en C# lo está interpretando como decimal

busca como se representan... por lo que veo creo que es \0###

o simplemente usa los valores octales como decimales (en lugar de 010201, usa 4225 y 017 es 15)


« Última modificación: 21 Marzo 2018, 22:49 pm por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Migrar funcion de C a C# problema con tamaño de variable 16 y 32 bits
« Respuesta #2 en: 21 Marzo 2018, 22:59 pm »

Pense que si lo interpretaba como Octal.

Muchas gracias Engel, con eso quedo, eres una maquina!!  ;-) ;-) ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tamaño de variables y campos de bits
PHP
morpheus747 1 4,635 Último mensaje 12 Enero 2009, 04:11 am
por Karman
Problema con Malloc y cadenas de tamaño variable. « 1 2 »
Programación C/C++
samur88 13 10,090 Último mensaje 25 Noviembre 2010, 01:06 am
por samur88
Tamaño de array através de variable
Programación C/C++
eleon 3 3,127 Último mensaje 20 Julio 2012, 01:48 am
por rir3760
Calcular tamaño de caracteres de una variable
Programación C/C++
Puntoinfinito 3 2,223 Último mensaje 27 Marzo 2013, 18:28 pm
por anonimo12121
Problema al procesar una variable desde php a una función javascript
PHP
Legnak 3 2,620 Último mensaje 19 Junio 2013, 04:30 am
por Legnak
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines