![]() |
Convertir de hexadecimal a decimal
Hola chicos aqui estoy de nuevo tengo un problema, necesito pasar de hexadecimal a decimal pero entre los digitos lleva un signo - (menos), como puedo pasar todos los digitos y que ignore el signo - (menos) esta es la cantidad que necesito pasar
A5FE-E0C2-65DA Muxas gracias.CRIS. |
Prueba con esta función que he creado sobre la marcha:
Código:
Function HexToInt(S:String):LongInt; Un Saludo. |
Por si lo que querías era únicamente quitar el guión:
Código:
Function QuitaMenos(S:String):String; QuitaMenos('ABC-DDD'); Un Saludo. |
Ya funciona muxas grasiaaaaaassss ole ole ole.
Salu2.CRIS. |
Cita:
Saludos! |
Hola chicos parecia que iba bien pero pasa una cosa, si el en hexadecimal tenemos dos numero iguales seguidos o dos letras ya no sale bien la conversion, me sale una cantidad que no se asemeja a la cantidad real y ademas sale un signo - (menos) delante de la cantidad resultante. Si el hexagecimal tiene digitos que no se repiten seguidos va perfecto pero si hay dos iguales ya me sale lo comentado.
Salu2.CRIS. |
Me parece que lo que tu quieres convertir no es un hexadecimal "puro", para llamarlo de alguna manera. No se que significan los - que tienen en el medio, pero un hexadecimal se escriben del mismo modo que los números decimales con la salvedad que cambia la base de 10 a 16 de 0..10 o 0..F
¿Qué son esos datos que nos muestras? |
Hola pues esos datos son el numero de serie del disco duro, pero como ya he dicho antes, me sale el signo menos entre los digitos, por eso queria quitarle el guion y despues convertirlo a decimal, bueno chicos a ver si se os ocurre algo.Sal2.CRIS.
|
Para obtener el número de volumen del disco duro:
Código:
function GetVolumeID(DriveChar: Char): String; |
Hola, aqui pongo el codigo que yo hago para todo lo que necesito hacer, primero averiguo el numero de serie del hd despues le quito el signo (-) y despues lo convierto a decimal.
1.º El numero de serie es este 90A0-03FE 2.º Al quitarle el signo - se queda en 90A003FE 3.º Y al convertirlo me da -1868561410 ¿que hago mal? aqui teneis el codigo. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; SpeedButton1: TSpeedButton; Edit1: TEdit; procedure FormActivate(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation Function QuitaMenos(S:String):String; begin while Pos('-', S) > 0 do Delete(s,Pos('-', S),1); Result:=S; end; function HexToInt(const Value: String): Integer; begin Result := StrToInt('$' + Value); end; function GetVolumeID(DriveChar: Char): String; var MaxFileNameLength, VolFlags, SerNum: DWord; begin if GetVolumeInformation(PChar(DriveChar + ':\'), nil, 0, @SerNum, MaxFileNameLength, VolFlags, nil, 0) then begin Result := IntToHex(SerNum,8); Insert('', Result, 5); end else Result := ''; end; {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); begin Label1.Caption:=GetVolumeId('c'); end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin Label2.Caption:=IntToStr( HexToInt(label1.Caption) ); end; end. Salu2.CRIS. |
Como la funcion de obtención del número de volumen del disco ya devuelve un número no veo porque se ha de pasar a hexadecimal, para despues volverlo a decimal, le hacemos los siguientes mínimos cambios y ya estaría arreglado el problema.
Código:
function GetVolumeID(DriveChar: Char): String; |
Por error pegue código que no tenía nada que ver con la función obtener el número del volumen del disco duro, gracias a Andrés que me lo ha comunicado he recitificado dicha función
Un Saludo. |
Pasar de Hex a decimal
He probado las funciones que poneis. Pero que pasa cuando el valor de entrada es un string de 14 caracteres:
00000f0ffb3555 El resultado según la calculadora cientifica de windows deberia ser 64692630869 haciendo las pruebas oportunas con distintas funciones no me sale esto. Esto viene que tengo que leer una secuncia de 14 caracteres. |
Hola mqm, bienvenido al foro, si te apetece echale un vistazo a la guia de estilo, para saber como funciona todo por aquí.
En cuanto a tu pregunta no dices con que funciones probaste, ni que error te daban, ni tampoco que versión de delphi utilizas, así que vamos a suponer que no probaste con StrToInt64. Es decir:
|
La franja horaria es GMT +2. Ahora son las 01:27:57. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi