Forum > Spanish

sumar ascii como hex

(1/6) > >>

mav:
Hola.
Como podria hacer algo así:
  Nombre:string;
...
 Nombre := mayoraprendiendo;
..sumar el valor en hexadecimal de cada segunda letra de nombre y mostrar el resultado en hexadecimal.
Saludos :)

lucamar:
Suena como si fueran deberes así que mejor que código, una pequeña explicación: Recorre la cadena en un bucle como si fuera un array y, por cada índice par, toma el código de la letra con Ord() y súmalo al total. Depués, convierte el total en hexa con IntToHex().

Si no son deberes, dilo y te paso algo de código, aunque debería ser bastante fácil, por no decir trivial. ;)

Por cierto, deja de ser trivial (aunque sigue siendo fácil) si la cadena es en algún tipo de Unicode: UTF-8, UnicodeString, WideChar, etc.

mav:
Hola, no son deberes, son ejercicios que intento hacer para aprender desde cero a mis sesenta y alguno años, es un keygenme de los que circulan por ahi que he resuelto y el algoritmo es el siguiente:
   1.- 10 o mas caracteres para nombre (no conoceriamos el tamaño del array)
   2.- Toma el primero ,el tercero y luego cada segundo número (osea va sumando los que estan en posiciones impares 1,3,5,7...etc) ,  y se guarda el resultado (siempre el hex de los ascii)
   3.- Toma el número que hemos tecleado le suma una constante que siempre es el producto
       de 19*16 = 226 en hexadecimal.El número tecleado es el que quiero hacer aparecer con el programa
   4.- Compara el resultado de esta suma con el resultado de la suma del punto 2.
       si son iguales todo bien, si no que vuelvas otra vez a intentarlo.   
..pero para mi es complejo..
Gracias por contestar
Saludos

lucamar:
Vale, perdona; es que sonaba un montón como el típico ejercicio de clase.

Imagino que no quieres el problema completo resuelto, así que este código responde sólo a tu pregunta inicial, aunque tengo una pequeña duda:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---{ Si sólo quieres la suma, hazle devolver un Integer }function TotalEven(const sv: AnsiString): AnsiString;var  Total: Integer = 0;  i: Integer;begin  for i := 1 to Length(sv) do    if Odd(i) then Total := Total + Ord(sv[i]);  Result := Total.ToHexString(0);  {Result := Total; Si sólo quieres la suma.}end;
La duda es qué quieres decir con "usando siempre el hexa": ¿quieres decir el valor de código o la representación en hexa del mismo?

Quiero decir, aunque esté en hexadecimal un número es un número, así que puedes trabajar con él normalmente y convertir a hexa al final, para mostrarlo. Pero si te refieres a la representación en sí, como cadena ('3F', en vez de $3F o 63 decimal) las cosas cambian un poco.

mav:
Tienes razón, da lo mismo sumar los caracteres, como hexadecimal, o decimal, al final se convierten en lo que deseemos.
Y no, no queria el problema entero resuelto, por eso preguntaba sólo esa parte para darme una idea de como continuar,
muchas gracias.
Si no soy capaz de continuar, preguntaré alguna cosa mas :) :) :) .
El 'armar' los loops y los arrays-matrices es lo más trabajo me está costando.
Gracias.

Navigation

[0] Message Index

[#] Next page

Go to full version