Eu tenho uma célula que contém este valor:
0x00006cd2c0306953
e eu quero convertê-lo em um número.
Eu tentei:
=HEX2DEC(C8)
Onde C8
está a célula que contém meu valor hexadecimal.
Eu recebo um erro # NUM.
O que estou fazendo de errado?
Eu tenho uma célula que contém este valor:
0x00006cd2c0306953
e eu quero convertê-lo em um número.
Eu tentei:
=HEX2DEC(C8)
Onde C8
está a célula que contém meu valor hexadecimal.
Eu recebo um erro # NUM.
O que estou fazendo de errado?
Respostas:
Você pode simplesmente usar:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
fornece o comprimento da 0x
corda. Exclua o comprimento de 0x
, a sequência restante é o número hexadecimal. Use a função Excel para obter a dec.
HEX2DEC
aceita um máximo de dez dígitos hexadecimais. A sequência na pergunta 0x00006cd2c0306953
, tem 18 caracteres. Sua solução avalia RIGHT(A1,(LEN(A1)-2))
; 18−2 é 16, então RIGHT(…)
retorna 00006cd2c0306953
, que tem 16 dígitos. Mesmo se você retirar os zeros à esquerda, terá 12 dígitos, o que ainda é muito. Se você conseguir fazer isso funcionar, descreva sua configuração. (Isto é, qual a versão do Excel que você está usando E você faz nada complicado para chegar a este trabalho?)
Como o TwiterZX indicou, Hex2Dec
a entrada é limitada a 10 caracteres e a 6cd2c0306953
12 caracteres. Portanto, isso não vai funcionar, mas vamos rolar nossa própria função para isso. Usando o VBA, adicione um módulo e use o código a seguir (pode ser necessário ajustar com base nas suas necessidades)
' Force explicit declaration of variables
Option Explicit
' Convert hex to decimal
' In: Hex in string format
' Out: Double
Public Function HexadecimalToDecimal(HexValue As String) As Double
' If hex starts with 0x, replace it with &H to represent Hex that VBA will understand
Dim ModifiedHexValue As String
ModifiedHexValue = Replace(HexValue, "0x", "&H")
HexadecimalToDecimal = CDec(ModifiedHexValue)
End Function
No Excel, digamos que a célula A1 contém 0x00006cd2c0306953
, a fórmula de A2 =HexadecimalToDecimal(A1)
resultará em 1.19652E+14
. Formate a coluna para um número com zero decimal e o resultado será 119652423330131
.
O HEX2DEC é limitado a 10 caracteres, mas isso não significa que não possamos usá-lo. Basta usá-lo várias vezes para converter 10 caracteres por vez e aplicar a potência apropriada de 2 a cada uso.
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[Aviso: não testado no momento]
Mais tarde: agora estou em uma planilha, pronta para testar. Altere 3,5 em MID para 3,6. Hmm .. Ainda não está certo.
Acontece que o HEX2DEC está trabalhando em valores hexadecimais assinados, portanto o primeiro termo acaba sendo negativo. Não sei por que, mas aqui está a versão fixa que adiciona 2 ^ 40 (ou 16 ^ 10, como estamos trabalhando em hex) para corrigir:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
No entanto, isso só funciona se o DIREITO (C8,10) for negativo. Aqui está minha solução geral:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ugggh.
Uma maneira suja de realizar essa conversão, sem usar uma função (consulte este tópico do fórum do Excel para isso) é usar esta fórmula para calcular o valor de cada caractere na string e, em seguida, resumir esses valores. Obviamente, isso envolve o uso de células temporárias para decompor o número:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
Supondo que você coloque essas células temporárias nas linhas 1 a 16, isso funciona extraindo cada caractere, começando da direita, convertendo-o em um valor e aplicando a potência relevante de 16. Resuma todas as 16 células para obter seu valor.
16^(ROW() - 1)
é muito mais limpo e mais fácil de ler do quePOWER()
Verifique se a sua coluna com números HEX não está tendo 0x. O número HEX deve ser C8, não 0xC8. Espero que ajude.
HEX2DEC falhará se houver algum caractere não hexadecimal inicial ou final (ABCDEF0123456789). Os espaços são uma mina terrestre real porque não são visíveis. Geralmente, os números hexadecimais, representados como seqüências de caracteres, nos arquivos de log contêm espaços à esquerda e / ou à direita. Acho que "= HEX2DEC (TRIM (A1)) geralmente corrige esse problema. No entanto, algo como" = HEX2DEC (DIREITO (TRIM (A1), 10)) pode ser necessário devido à limitação de 10 caracteres do HEX2DEC.
Esta função mudou, tente usar
=HEXDEC(C8)
portanto, sem o número 2 entre HEX e DEC
,
ou ;
aqui