# Hex to Dec

Hex2Dec to prosty, ale potężny konwerter szesnastkowy (HEX) na dziesiętny (DEC).
<!--more-->
# 🛠️ Konwerter HEX na DEC

```
$$\   $$\ $$$$$$$$\ $$\   $$\  $$$$$$\  $$$$$$$\  $$$$$$$$\  $$$$$$\  
$$ |  $$ |$$  _____|$$ |  $$ |$$  __$$\ $$  __$$\ $$  _____|$$  __$$\ 
$$ |  $$ |$$ |      \$$\ $$  |\__/  $$ |$$ |  $$ |$$ |      $$ /  \__|
$$$$$$$$ |$$$$$\     \$$$$  /  $$$$$$  |$$ |  $$ |$$$$$\    $$ |      
$$  __$$ |$$  __|    $$  $$<  $$  ____/ $$ |  $$ |$$  __|   $$ |      
$$ |  $$ |$$ |      $$  /\$$\ $$ |      $$ |  $$ |$$ |      $$ |  $$\ 
$$ |  $$ |$$$$$$$$\ $$ /  $$ |$$$$$$$$\ $$$$$$$  |$$$$$$$$\ \$$$$$$  |
\__|  \__|\________|\__|  \__|\________|\_______/ \________| \______/ 
```

## 📚 Zawartość
- [Aplikacja](#aplikacja)
- [Korzystanie?](#korzystanie)
- [Instalacja](#instalacja)
- [Użycie](#użycie)
- [Dokumentacja](#dokumentacja)
- [Narzędzia](#narzędzia)
- [Błędy](#błędy)
- [Autor](#autor)
- [Kod](#kod)
- [Opis funkcji kodu](#opis)
- [Strona](#strona)
- [Podsumowanie](#podsumowanie)
- [Zastrzeżenie](#dzastrzeżenia)
- [Pobierz](#pobierz)
- [Licencja](#licencja)

## 🚀 Aplikacja

**Konwerter HEX na DEC** to proste, ale potężne narzędzie wiersza poleceń napisane w języku Go (Golang), które konwertuje wartości szesnastkowe (HEX) na wartości dziesiętne (DEC). Obsługuje zarówno pojedyncze wartości HEX, jak i przetwarzanie wsadowe z pliku. Narzędzie jest przeznaczone dla programistów, inżynierów i wszystkich osób pracujących z systemami numerycznymi.

### 🔑 Główne cechy:
- ✅ Konwertuj pojedyncze wartości HEX na DEC.
- ✅ Przetwarzaj wiele wartości HEX z pliku.
- ✅ Zapisywanie wyników do pliku wyjściowego.
- ✅ Łatwy w użyciu interfejs wiersza poleceń.
- ✅ Lekki i szybki.
- ✅ Uruchamiany w konsoli (CMD/CLI).

## 💡 Korzystanie

### 🤖 Automatyzacja:
Program eliminuje potrzebę ręcznej konwersji wartości HEX na DEC, co oszczędza czas i zmniejsza ryzyko błędów.

### 🎛️ Elastyczność:
Obsługuje zarówno pojedyncze wartości, jak i pliki z wieloma wartościami HEX.

### 🛠️ Prostota:
Łatwość użytkowania dzięki przejrzystemu interfejsowi tekstowemu i obsłudze flag.

### 🔒 Bezpieczeństwo:
Zawiera obsługę błędów dla nieprawidłowych danych wejściowych.

---

## 📥 Instalacja

### Wymagania wstępne
- Go (Golang) zainstalowany w systemie. Możesz go pobrać [tutaj](https://golang.org/dl/).

### Kroki
1. Sklonuj repozytorium:
```bash
git clone https://github.com/lukaszwojcikdev/hex2dec_converter.git
```
2. Przejdź do katalogu projektu:
```bash
cd hex2dec_converter
```
3. Zbuduj projekt:
```bash
go build -o hex2dec_converter
```
lub
```bash
go build hex2dec_converter.go
```
5. Uruchom plik wykonywalny:
```bash
./hex2dec_converter
```
---

## 🛠️ Użycie

### Konwertuj pojedynczą wartość HEX
Aby przekonwertować pojedynczą wartość HEX na DEC, użyj `-dh` flaga:
```bash
./hex2dec_converter -dh 583DFD
```
Dane wyjściowe:
```
5787133
```

### Konwertuj wartości HEX z pliku
Aby przekonwertować wiele wartości HEX z pliku, użyj flagi `-dhf`:
```bash
./hex2dec_converter -dhf input.txt
```
- **Format pliku wejściowego**: Wartości HEX powinny być rozdzielone przecinkami (`,`), np. `108AB2,1BBBFE,6386DE`.
- **Dane wyjściowe**: Wyniki zostaną zapisane w pliku o nazwie `input_dec.txt`.

### Wyświetl pomoc
Aby wyświetlić menu pomocy, użyj flagi `-h`:
```bash
./hex2dec_converter -h
```

### Wyświetl informacje o programie
Aby wyświetlić informacje o programie, użyj flagi `-i`:
```bash
./hex2dec_converter -i
```

---
## 📄 Dokumentacja

Flagi:
```
-h - Wyświetl pomoc.
-i - Wyświetl informacje o programie.
-dh - Konwertuj pojedynczą wartość HEX na DEC.
-dhf - Konwertuj wartości HEX z pliku na DEC i zapisz wynik do nowego pliku.
```
Format pliku wejściowego:
Wartości HEX w pliku powinny być rozdzielone przecinkami (,) bez spacji.

Przykład:
```
108AB2,1BBBFE,6386DE
```

Aby uzyskać szczegółową dokumentację, odwiedź oficjalną stronę projektu:
[https://lukaszwojcik.eu/hex2dec.html](https://lukaszwojcik.eu/hex2dec.html)

---
## 🛠️ Narzędzia

Podczas opracowywania **HEX2DEC** i tworzenia tego pliku `README.md` użyłem następujących narzędzi i oprogramowania:

- [**IrfanView**](https://www.irfanview.com/64bit.htm) - Użyty do zmiany rozmiaru obrazów.
- [**TinyPNG**](https://tinypng.com/) - Użyty do kompresji obrazów w celu zmniejszenia rozmiaru pliku bez utraty jakości.
- [**Notepad++**](https://notepad-plus-plus.org/downloads/) - Edytor kodu używany do pisania projektu.
- [**Go (Golang)**](https://go.dev/dl/) - Podstawowy język programowania użyty do opracowywania konwertera HEX2DEC.
- [**Carbon**](https://carbon.now.sh) - Użyty do tworzenia pięknej składni kodu źródłowego jako obraz PNG.
- [**GitHub**](https://github.com/) - Użyty do kontroli wersji i hostowania repozytorium projektu.
- [**MD5**](https://fourmilab.ch) - Użyty do generowania pliku skrótu MD5.
- [**Generator ASCII**](https://patorjk.com/software/taag) - Użyty do tworzenia loga ASCII dla projektu.
- [**Shields.io**](https://shields.io/) - Użyty do generowania odznak dla pliku `README.md` (np. wersja, licencja itp.).
- [**Markdown Online**](https://dillinger.io/) - Użyty do pisania i formatowania pliku `README.md`.
- [**Ikony Unicode**](https://symbolsonly.com) - Zbiór ikon Unicode wykorzystany do akapitów ## lub ###.
- [**Stable Diffusion**](https://stablediffusion.com/tools/ai-image-generator) - Użyty do generowania obrazu okładki.
- [**🎵 Muzyka ZHU**](https://www.youtube.com/watch?v=Lrl1X2-Xa2o) - Relaksacyjna muzyka słuchana podczas projektowania Hex2Dec.

---
## 🐛 Błędy
Jeśli napotkasz jakieś błędy lub problemy, zgłoś je [tutaj](https://github.com/lukaszwojcikdev/hex2dec_converter/issues)

---
## 👨‍ Autor
- **Łukasz Wójcik**
- 🌐 Witryna: [https://lukaszwojcik.eu](https://lukaszwojcik.eu)
- 🔗 LinkedIn: [https://www.linkedin.com/in/lukasz-michal-wojcik](https://www.linkedin.com/in/lukasz-michal-wojcik)


---
## ‍💻 Kod źródłowy

```go
package main

import (
    "flag"
    "fmt"
    "log"
    "os"
    "strconv"
    "strings"
)

func hexToDec(hex string) (string, error) {
    dec, err := strconv.ParseInt(hex, 16, 64)
    if err != nil {
        return "", fmt.Errorf("Invalid HEX value: %s", hex)
    }
    return strconv.FormatInt(dec, 10), nil
}

func hexToDecFile(fileName string) error {
    data, err := os.ReadFile(fileName)
    if err != nil {
        return fmt.Errorf("failed to read file: %w", err)
    }
    hexValues := strings.Split(strings.TrimSpace(string(data)), ",")
    var decValues []string
    for _, hex := range hexValues {
        dec, err := hexToDec(hex)
        if err != nil {
            return fmt.Errorf("conversion error: %w", err)
        }
        decValues = append(decValues, dec)
    }
    outputFileName := strings.TrimSuffix(fileName, ".txt") + "_dec.txt"
    outputData := []byte(strings.Join(decValues, ","))
    err = os.WriteFile(outputFileName, outputData, 0644)
    if err != nil {
        return fmt.Errorf("failed to write file: %w", err)
    }
    return nil
}

func printHelp() {
    fmt.Println("HEX to DEC Converter v1.0c")
    fmt.Println("░█░█░█▀▀░█░█░▀▀▄░█▀▄░█▀▀░█▀▀")
    fmt.Println("░█▀█░█▀▀░▄▀▄░▄▀░░█░█░█▀▀░█░░")
    fmt.Println("░▀░▀░▀▀▀░▀░▀░▀▀▀░▀▀░░▀▀▀░▀▀▀")
    fmt.Println("")
    fmt.Println("(c) by Lukasz Wojcik 2024, 2025")
    fmt.Println("Use: hex2dec [flag] [argument]")
    fmt.Println("")
    fmt.Println("Flags:")
    fmt.Println(" -h   Display help")
    fmt.Println(" -i   Displays program information")
    fmt.Println(" -dh  Converts a HEX value to DEC ")
    fmt.Println(" -dhf Converts HEX values from file and writes DEC to file")
    fmt.Println("")
    fmt.Println("Examples of use:")
    fmt.Println(" hex2dec -dh 583DFD")
    fmt.Println(" hex2dec -dhf input.txt")
    fmt.Println("")
    fmt.Println("HEX values in the file should be separated by a comma (,) with no 'space'.")
    fmt.Println("Example of the HEX system arrangement in the 'inside.txt' file:")
    fmt.Println("108AB2,1BBBFE,6386DE,...,...")
}

func printProgramInfo() {
    fmt.Println("Hex2Dec - HEX to DEC Converter")
    fmt.Println("Author: Lukasz Wojcik")
    fmt.Println("Version: 1.0c")
    fmt.Println("Year: 2025")
    fmt.Println("Site: https://lukaszwojcik.eu/hex2dec.html")
    fmt.Println("Source Code: https://github.com/lukaszwojcikdev/hex2dec_converter.git")
}

func main() {
    convertHex := flag.String("dh", "", "Converts HEX value to DEC")
    help := flag.Bool("h", false, "Displays help")
    info := flag.Bool("i", false, "Displays information about the program")
    convertHexFile := flag.String("dhf", "", "Converts HEX values from a file and writes DEC to the file")
    flag.Parse()

    if *help {
        printHelp()
        return
    }

    if *info {
        printProgramInfo()
        return
    }

    if *convertHex != "" {
        dec, err := hexToDec(*convertHex)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(dec)
        return
    }

    if *convertHexFile != "" {
        err := hexToDecFile(*convertHexFile)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println("Conversion completed successfully. Results saved to file: input_dec.txt")
        return
    }
    printHelp()
}
```

---
## 📝 Opis

1. `hexToDec`
Funkcja konwertuje pojedynczą wartość HEX na DEC.
```go
func hexToDec(hex string) (string, error) {
    dec, err := strconv.ParseInt(hex, 16, 64)
    if err != nil {
        return "", fmt.Errorf("Invalid HEX value: %s", hex)
    }
    return strconv.FormatInt(dec, 10), nil
}
```
### Parametry:
`hex`: ciąg znaków reprezentujący liczbę w systemie szesnastkowym.

**Zwraca:**
Wartość w systemie dziesiętnym jako string.
Błąd, jeśli wartość HEX jest nieprawidłowa.

**Działanie:**
Używa funkcji strconv.ParseInt do konwersji HEX na DEC.
Jeśli wystąpi błąd, zwraca odpowiedni komunikat.

2. `hexToDecFile`
Funkcja konwertuje wartości HEX zapisane w pliku na wartości DEC i zapisuje wynik do nowego pliku.

```go
func hexToDecFile(fileName string) error {
    data, err := os.ReadFile(fileName)
    if err != nil {
        return fmt.Errorf("failed to read file: %w", err)
    }
    hexValues := strings.Split(strings.TrimSpace(string(data)), ",")
    var decValues []string
    for _, hex := range hexValues {
        dec, err := hexToDec(hex)
        if err != nil {
            return fmt.Errorf("conversion error: %w", err)
        }
        decValues = append(decValues, dec)
    }
    outputFileName := strings.TrimSuffix(fileName, ".txt") + "_dec.txt"
    outputData := []byte(strings.Join(decValues, ","))
    err = os.WriteFile(outputFileName, outputData, 0644)
    if err != nil {
        return fmt.Errorf("failed to write file: %w", err)
    }
    return nil
}
```

**Parametry:**
fileName: nazwa pliku wejściowego zawierającego wartości HEX, oddzielone przecinkami.

**Zwraca:**
`error`: błąd, jeśli operacja odczytu, konwersji lub zapisu nie powiedzie się.

**Działanie:**
Odczytuje zawartość pliku.
Rozdziela wartości HEX po przecinkach.
Konwertuje każdą wartość HEX na DEC za pomocą funkcji hexToDec.
Zapisuje wyniki do nowego pliku o nazwie nazwa_pliku_dec.txt.

3. `printHelp`
Funkcja wyświetla pomoc dla użytkownika.
```go
func printHelp() {
    fmt.Println("HEX to DEC Converter v1.0c")
    ...
}
```

**Działanie:**
Wyświetla szczegółowe informacje o dostępnych flagach, argumentach oraz przykładach użycia programu. Informuje, jak powinny wyglądać dane wejściowe w pliku.

4. `printProgramInfo`
Funkcja wyświetla informacje o programie.
```go
func printProgramInfo() {
    fmt.Println("Hex2Dec - HEX to DEC Converter")
    ...
}
```

**Działanie:**
Wyświetla nazwę programu, autora, wersję, rok wydania oraz linki do strony i repozytorium z kodem źródłowym.

5. `main`
Funkcja główna programu, obsługująca logikę sterującą na podstawie flag przekazanych przez użytkownika.
```go
func main() {
    convertHex := flag.String("dh", "", "Converts HEX value to DEC")
    help := flag.Bool("h", false, "Displays help")
    info := flag.Bool("i", false, "Displays information about the program")
    convertHexFile := flag.String("dhf", "", "Converts HEX values from a file and writes DEC to the file")
    flag.Parse()

    if *help {
        printHelp()
        return
    }

    if *info {
        printProgramInfo()
        return
    }

    if *convertHex != "" {
        dec, err := hexToDec(*convertHex)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(dec)
        return
    }

    if *convertHexFile != "" {
        err := hexToDecFile(*convertHexFile)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println("Conversion completed successfully. Results saved to file: input_dec.txt")
        return
    }
    printHelp()
}
```

**Działanie:**

**Definiuje flagi:**

`-dh`: konwertuje pojedynczą wartość HEX na DEC.

`-h`: wyświetla pomoc (printHelp).

`-i`: wyświetla informacje o programie (printProgramInfo).

`-dhf`: konwertuje wartości HEX z pliku na DEC i zapisuje do pliku.

Na podstawie podanych flag wykonuje odpowiednie operacje:

	➡️Wyświetla pomoc lub informacje o programie.
	➡️Konwertuje pojedynczą wartość HEX na DEC.
	➡️Przetwarza plik z wartościami HEX.
	
Jeśli żadna flaga nie zostanie podana, wyświetla pomoc.


---
## 📝 Podsumowanie
**Konwerter HEX na DEC** to wszechstronne narzędzie do konwersji wartości szesnastkowych na wartości dziesiętne. Został zaprojektowany tak, aby był prosty, wydajny i łatwy w użyciu, dzięki czemu idealnie nadaje się dla programistów, inżynierów i studentów pracujących z systemami liczbowymi.

---
## ⚠️ Zastrzeżenie
Korzystając z tego oprogramowania, zgadzasz się na te warunki. Oprogramowanie jest dostarczane w stanie **„tak jak jest”** i korzystasz z niego na własne ryzyko. Autor nie ponosi żadnej odpowiedzialności za szkody lub problemy spowodowane korzystaniem z tego oprogramowania.

---
## 📥 Pobierz
Możesz pobrać najnowszą wersję projektu TUTAJ 👇

| Do pobrania |
| ------- |
| [Hex2Dec.zip](https://www.lukaszwojcik.eu/hex2dec/hex2dec_converter.zip) | 
| [Source_Code](https://www.lukaszwojcik.eu/hex2dec/hex2dec_converter.go) |
| [MD5](https://lukaszwojcik.eu/hex2dec/hex2dec_converter.zip.md5) |
| [Carbon](https://www.lukaszwojcik.eu/hex2dec/hex2dec_converter_source_code_carbon.png)|

---
## 📜 Licencja
Ten projekt jest licencjonowany na podstawie [Licencji MIT](https://choosealicense.com/licenses/mit/)

---
**Miłego korzystania z konwertera HEX na DEC!** 🚀
