Visual Basic - Extraño Dsbordamiento

Life is soft - evento anual de software empresarial
 
Vista:

Extraño Dsbordamiento

Publicado por endless_Loop (32 intervenciones) el 20/02/2004 18:32:23
Antes de dar cualquier solucion Posible a esa funcion, que les ande, no sea cosa de que me hagan probar una cosa que NO SABEN si anda.
Esta funcion es muy simple, cupienla en un proyecto, modifiquen lo necesario, y vean que desbordamiento mas raro que dá.

Function CambiaBytes(ByVal Numero As Long) As Long
'Como el Long que se toma es un numero
'de puerto, no supera los 2 bytes
'de un long, variando entre 0 y 65535
Dim LByte As Byte 'Byte inferior [00000000][00000000][00000000][LLLLLLLL]
Dim HByte As Byte 'Byte Superior [00000000][00000000][HHHHHHHH][00000000]
'los dos ultimos bytes serán [HHHHHHHH][LLLLLLLL]
'(L y H no representan una posicion binaria, la forma en que se usa es solo para identificarlos)
LByte = Numero Mod 256
'Obtiene [LLLLLLLL] calculando el resto de la division Entera del Numero entre 256
HByte = Int(Numero / 256)
'Obtiene [HHHHHHHH] haciendo una division entera Numero \ 256
CambiaBytes = LByte * 256 + HByte
'Es raro que de Desbordamiento en la Ultima linea, ya que nisiquiera el byte superior multiplicado por 256 llega a pasar del segundo byte
End Function
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Extraño Dsbordamiento

Publicado por Cecilia Colalongo (3117 intervenciones) el 20/02/2004 18:57:03
Haciendo un casteo explícito me funciona hasta el valor 65535:

Function CambiaBytes(ByVal Numero As Long) As Long
'Como el Long que se toma es un numero
'de puerto, no supera los 2 bytes
'de un long, variando entre 0 y 65535
Dim LByte As Byte 'Byte inferior [00000000][00000000][00000000][LLLLLLLL]
Dim HByte As Byte 'Byte Superior [00000000][00000000][HHHHHHHH][00000000]
'los dos ultimos bytes serán [HHHHHHHH][LLLLLLLL]
'(L y H no representan una posicion binaria, la forma en que se usa es solo para identificarlos)
LByte = Numero Mod 256
'Obtiene [LLLLLLLL] calculando el resto de la division Entera del Numero entre 256
HByte = Int(Numero / 256)
'Obtiene [HHHHHHHH] haciendo una division entera Numero \ 256
CambiaBytes = CLng(LByte) * 256 + CLng(HByte)
'Es raro que de Desbordamiento en la Ultima linea, ya que nisiquiera el byte superior multiplicado por 256 llega a pasar del segundo byte
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Extraño Dsbordamiento

Publicado por endless_Loop (32 intervenciones) el 20/02/2004 19:07:31
Grax acabas de terminar mi firewall ^_^
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar