Added code
This commit is contained in:
parent
3f265a1af4
commit
e5a7b72537
3 changed files with 254 additions and 0 deletions
19
Makefile
Normal file
19
Makefile
Normal file
|
@ -0,0 +1,19 @@
|
|||
all: asciidencoder
|
||||
|
||||
WARNINGS = -Wall
|
||||
DEBUG = -ggdb -fno-omit-frame-pointer
|
||||
OPTIMIZE = -O2
|
||||
OPTS = -lm
|
||||
|
||||
asciidencoder: Makefile asciidencoder.c
|
||||
$(CC) -o $@ $(WARNINGS) $(DEBUG) $(OPTIMIZE) $(OPTS) asciidencoder.c
|
||||
|
||||
clean:
|
||||
rm -f asciidencoder
|
||||
|
||||
install:
|
||||
echo "Installing is not supported"
|
||||
|
||||
run:
|
||||
./asciidencoder
|
||||
|
103
README.md
Normal file
103
README.md
Normal file
|
@ -0,0 +1,103 @@
|
|||
# asciidencoder
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Introduction](#introduction)
|
||||
- [Building](#building)
|
||||
- [Usage](#usage)
|
||||
- [Options](#options)
|
||||
- [Examples](#examples)
|
||||
- [Notes](#notes)
|
||||
|
||||
## Introduction
|
||||
|
||||
**ascii-dencoder** is a command-line utility designed to convert strings into their corresponding ASCII codes and vice versa: from ASCII codes to characters. This tool is particularly useful for developers, students, and hobbyists involved in fields requiring ASCII manipulation or understanding.
|
||||
|
||||
## Building
|
||||
|
||||
This tool is provided as source code and can be built using `make`. By just
|
||||
typing make in the terminal within the code's directory:
|
||||
|
||||
```bash
|
||||
make
|
||||
```
|
||||
|
||||
You should now have an executable named `ascii-dencoder`. Optionally, you can
|
||||
copy it to a location in your PATH for easier access.
|
||||
|
||||
## Usage
|
||||
|
||||
To use `ascii-dencoder`, run the executable from the command line with the
|
||||
appropriate options.
|
||||
|
||||
```bash
|
||||
./ascii-dencoder [OPTIONS] <value>
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
**ascii-dencoder** accepts the following options:
|
||||
|
||||
- `-s`, `--string <value>`:
|
||||
- Convert the input string to its ASCII codes.
|
||||
|
||||
- `-c`, `--code <value>`:
|
||||
- Convert the input ASCII code to its corresponding character.
|
||||
|
||||
- `-h`, `--help`:
|
||||
- Display the help message and exit.
|
||||
|
||||
- `-v`, `--version`:
|
||||
- Display the program version and exit.
|
||||
|
||||
## Examples
|
||||
|
||||
1. Convert a string to ASCII codes:
|
||||
|
||||
```bash
|
||||
./ascii-dencoder -s "hello"
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
The ASCII code of the character 'h' is 104
|
||||
The ASCII code of the character 'e' is 101
|
||||
The ASCII code of the character 'l' is 108
|
||||
The ASCII code of the character 'l' is 108
|
||||
The ASCII code of the character 'o' is 111
|
||||
```
|
||||
|
||||
2. Convert an ASCII code to a character:
|
||||
|
||||
```bash
|
||||
./ascii-dencoder -c 104
|
||||
```
|
||||
|
||||
Output:
|
||||
```
|
||||
The ASCII character for code '104' is 'h'
|
||||
```
|
||||
|
||||
3. Display help message:
|
||||
|
||||
```bash
|
||||
./ascii-dencoder -h
|
||||
```
|
||||
|
||||
This will display detailed usage instructions and available options.
|
||||
|
||||
4. Display version:
|
||||
|
||||
```bash
|
||||
./ascii-dencoder -v
|
||||
```
|
||||
|
||||
This will show the current version of the program.
|
||||
|
||||
## Notes
|
||||
|
||||
- The ASCII code conversion accepts numbers between 0 and 255.
|
||||
- Ensure proper usage of command-line arguments to avoid unexpected behavior.
|
||||
- This tool is straightforward and does not handle complex text encoding
|
||||
scenarios beyond basic ASCII.
|
132
asciidencoder.c
Normal file
132
asciidencoder.c
Normal file
|
@ -0,0 +1,132 @@
|
|||
/*
|
||||
* asciidencoder.c
|
||||
*
|
||||
* Copyright 2024 Clay Gomera
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <locale.h>
|
||||
#include <getopt.h>
|
||||
|
||||
#define VERSION 0.1
|
||||
#define NAME "asciidencoder"
|
||||
|
||||
void stringToAscii(char* input);
|
||||
void asciiToCharacter(char *input);
|
||||
void displayHelp();
|
||||
void displayVersion();
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
setlocale(LC_ALL, "");
|
||||
|
||||
int option;
|
||||
int s_flag = 0, c_flag = 0;
|
||||
char *s_value = NULL, *c_value = NULL;
|
||||
|
||||
static const char* short_options = "s:c:hv";
|
||||
static struct option long_options[] = {
|
||||
{"string", required_argument, NULL, 's'},
|
||||
{"code", required_argument, NULL, 'c'},
|
||||
{"help", no_argument, 0, 'h'},
|
||||
{"version", no_argument, 0, 'v'},
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
while ((option = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) {
|
||||
switch (option) {
|
||||
case 's':
|
||||
s_flag = 1;
|
||||
s_value = optarg;
|
||||
break;
|
||||
case 'c':
|
||||
c_flag = 1;
|
||||
c_value = optarg;
|
||||
break;
|
||||
case 'h':
|
||||
displayHelp();
|
||||
return 0;
|
||||
case 'v':
|
||||
displayVersion();
|
||||
return 0;
|
||||
case '?':
|
||||
default:
|
||||
fprintf(stderr, "Use '-h, --help' for help.\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
if (s_flag && c_flag) {
|
||||
fprintf(stderr, "Use only one option at a time.\n");
|
||||
displayHelp();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Check if no valid option was provided and display the help message
|
||||
if (!s_flag && !c_flag) {
|
||||
fprintf(stderr, "No valid options provided.\n");
|
||||
displayHelp();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Check which arguments are present
|
||||
if (s_flag) {
|
||||
stringToAscii(s_value);
|
||||
}
|
||||
else if (c_flag) {
|
||||
asciiToCharacter(c_value);
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
void stringToAscii(char *input) {
|
||||
input[strlen(input)] = '\0';
|
||||
|
||||
for (int i = 0; i < strlen(input); i++) {
|
||||
printf("The ASCII code of the character '%c' is %d\n", input[i], (unsigned char)input[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Function to convert an Extended ASCII code to its corresponding character.
|
||||
void asciiToCharacter(char *input) {
|
||||
int charCode = atoi(input);
|
||||
if (charCode < 0 || charCode > 255) {
|
||||
printf("Invalid ASCII code. Must be between 0 and 255.\n");
|
||||
} else {
|
||||
printf("The ASCII character for code '%d' is '%c'\n", charCode, (char)charCode);
|
||||
}
|
||||
}
|
||||
|
||||
// Function to display the help message
|
||||
void displayHelp() {
|
||||
printf("Usage: %s [OPTIONS] [VALUE]\n", NAME);
|
||||
printf("ASCII Decoder & Encoder.\n\n");
|
||||
printf("Options:\n");
|
||||
printf("\t-s, --string\tGive ASCII codes for each character in the input string.\n");
|
||||
printf("\t-c, --code\tGive ASCII character for input code.\n");
|
||||
printf("\t-h, --help\tDisplay this help message and exit.\n");
|
||||
printf("\t-v, --version\tDisplay version and exit.\n");
|
||||
}
|
||||
|
||||
// Function to display the version information
|
||||
void displayVersion() {
|
||||
printf("%s v%.1f\n", NAME, VERSION);
|
||||
}
|
||||
|
Loading…
Reference in a new issue