Como posso converter um número hexadecimal em um número decimal no Excel?

11

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 C8está a célula que contém meu valor hexadecimal.

Eu recebo um erro # NUM.

O que estou fazendo de errado?

Nathan Fellman
fonte
segundo mim C não é capital, pode ser pequeno. Então tente 'c8'
Sandy8086
7
@ Sandy8086: Excel não se preocupam com o caso dos indeces celulares
Nathan Fellman

Respostas:

5

Você pode simplesmente usar:

HEX2DEC(right(A1,(len(A1)-2)))

len(A1)fornece o comprimento da 0xcorda. Exclua o comprimento de 0x, a sequência restante é o número hexadecimal. Use a função Excel para obter a dec.

vegeta
fonte
Você já tentou isso? Você leu alguma coisa nesta página? Foi afirmado três vezes que HEX2DECaceita 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?)
Scott
4

Como o TwiterZX indicou, Hex2Deca entrada é limitada a 10 caracteres e a 6cd2c030695312 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.

zedfoxus
fonte
3

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.

Bill Nace
fonte
1
Somente o 40º bit é o bit de sinal, então você pode dividir o valor de 64 bits em dois valores de 32 bits e sempre será positivo. Caso contrário pad um zero para a cadeia hex se ele tiver menos de 37 pedaços
phuclv
2

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.

Dominique Jacquel
fonte
1
IMHO 16^(ROW() - 1)é muito mais limpo e mais fácil de ler do quePOWER()
phuclv
2

Tente o seguinte:

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
Stas
fonte
por que não usar 2^32?
Phuclv
0

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.

user2794645
fonte
0

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.

George H. Barbehenn
fonte
-2

Esta função mudou, tente usar

=HEXDEC(C8)

portanto, sem o número 2 entre HEX e DEC

Riad Krim
fonte
1
Isso não funciona de maneira alguma #
Nathan Fellman
Eu acho que essa função depende do idioma, qual é o idioma principal do seu aplicativo excel e sua versão ..?
Riad Krim
Office 2010 em inglês
Nathan Fellman
4
HEX2DEC função (ou hexdec) é limitado a 40 bits (10 caracteres), e o seu número é de 12 caracteres office.microsoft.com/en-us/excel-help/...
Riad Krim
Como esse idioma depende? Não há nem mesmo um separador função como ,ou ;aqui
phuclv