# Representaçao de Dados

### Tipos Arquivos

Para sabermos qual o tipo de arquivo (independente da sua extensão), podemos utilizar o comando:

```bash
file <file>
```

A maioria dos arquivos digitais tem uma assinatura localizada nos 20 primeiros bytes do arquivo e é através desse cabeçalho que seu tipo será definido, e não pela sua extensão.

###

### Decimal

É o sistema mais amplamente utilizado e é chamado de sistema de base 10 (decimal), pois usa 10 dígitos ou símbolos (`0 ,1, 2, 3, 4, 5, 6, 7, 8, 9`).\
A posição do número indica o valor que ele representa, e cada dígito é múltiplicado pela potência de 10 associada a sua posição. Segue abaixo o exemplo do número 5437:

```bash
5437 = 5000 + 400 + 30 + 7
# Ou mais precisamente
5437 = 5x10³ + 4x10² + 3x10¹ + 7x10º
```

###

### Binário

Sistema numeral de base 2 é representado por `1` e `0`, contendo 8 caracteres. Este segue a mesma regra do número decimal, porém este faz a multiplicação pela potência 2. Cada 1 ou 0 é chamado de `bit` (ou binário) e a soma de 8 bits se chama `byte`. O bit de ordem mais alta se localiza à extrema esquerda e tem maior valor, sendo chamado de `MSB (Most Significant Bit)` ou `Bit Mais Significativo`. Já o bit de valor mais baixo esstá localizaro fica à extrema extrema direita, sendo chamada de `LSB (Least Significat Bit)` ou `Bit Menos Significante`.

**DICA:** Os número binários podem ser escritos com o prefixo `b`, por exemplo: `0b11001`

###

### Hexadecimal

Também conhecido como `Hex`, este possui a base 16, contendo letras e números: `0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F`.\
**OBS.:** As letras maiúsculas são usadas para representar os número de 10 a 15

O Hexademical é mais curto e fácil de ser compreendidos por humanos. Segue abaixo um exemplo de conversão:

```bash
# Lembrando que "A" equivale "10"
19A = (1x16²) + (9x16¹) + (10X16º) = 256 +144 + 10 = 410
```

{% hint style="info" %}
**DICA:** Os números Hex podem ser diferenciados com a inclusão do prefixo **Ox** ou a inserção do subscrito **16** ou do sufixo **H**
{% endhint %}



### Convertendo Valores

Hexadecimal para Decimal

```bash
# Bash
printf "%d\n" 0x40
printf "%d\n" 0xdd84
printf "%d.%d.%d.%d\n" 0xc0 0xa8 0x00 0xc8

# Python
python -c "print 0x88"
```

Hexadecimal para Ascii

```bash
printf "\x47\x45\x54\n"
echo -e "\x47\x45\x54\n"
```



#### Sites

```bash
# Diversos tipos de encode/decode
https://ascii.cl

# Lista de caracteres com URL encode
https://www.w3schools.com/tags/ref_urlencode.ASP

# Encode/Decode em tempo real
https://onlinestringtools.com/
https://gchq.github.io/CyberChef/

# Converte Hexadecimal em Arquivo (binário)
https://tomeko.net/online_tools/hex_to_file.php?lang=en
```
