środa, 9 marca 2016

Kody ASCII

Ostatnio potrzebowałem skorzystać z kodów ASCII w konsoli systemu Windows. Oczywiście można znaleźć gotowe tablice z kodami ASCII w internecie, ale rozszerzone kody ASCII są zależne od systemu operacyjnego oraz strony kodowej. Tak więc stworzyłem prosty programik ascii-codes, który wyświetla symbole (znaki) dla kodów ASCII od 0 do 255.


ASCII (ang. American Standard Code for Information Interchange) – 7-bitowy kod przyporządkowujący liczby z zakresu 0−127: literom alfabetu angielskiego, cyfrom, znakom przestankowym i innym symbolom oraz poleceniom sterującym. Na przykład litera „a” jest kodowana jako liczba 97, a znak spacji jest kodowany jako 32. Znaki ASCII dzielimy na:
- sterujące (kody 0 - 31 oraz 127),
- drukowalne (kody 32 - 126).
Ponieważ kod ASCII jest 7-bitowy, a większość komputerów operuje na 8-bitowych bajtach, dodatkowy bit można wykorzystać na powiększenie zbioru kodowanych znaków do 256 symboli, a więc mamy:
- znaki ASCII rozszerzone (kody 128 - 255) - uzależnione od strony kodowej.

Stronę kodową konsoli Windows sprawdzamy poleceniem:

mode con cp

a ustawiamy poleceniem:

mode con cp=[strona kodowa]

np.

mode con cp=1250

Kod programu ascii-codes.c:
/*
 *  -----------------------------------------
 *  ASCII Codes 1.0
 *  -----------------------------------------
 *  Author: Adam Blaszczyk
 *          http://wyciekpamieci.blogspot.com
 *  Date:   2016-03-08
 *  -----------------------------------------
 *  
 *  Compilation (Linux, Windows):
 *         gcc ascii-codes.c -o ascii-codes -Wall
 *
 *  Usage:
 *         ascii-codes
 *         - ASCII and Extended ASCII *printable* characters between 32 and 255
 *         ascii-codes min
 *         - ASCII and Extended ASCII characters between [min] and 255
 *         ascii-codes min max
 *         - ASCII and Extended ASCII characters between [min] and [max]
 *
 */

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
  
  int ch;
  int min = 32;
  int max = 255;

  if(argc == 2)
    min = atoi(argv[1]);
  if(argc == 3) {
    min = atoi(argv[1]);
    max = atoi(argv[2]);
  }

  printf("\n");
  printf("  ASCII CODES\n");
  printf("  ==============================================\n");
  printf("     0 -  31; 127 --> ASCII control characters\n");
  printf("    32 - 126      --> ASCII printable characters\n");
  printf("   128 - 255      --> Extended ASCII characters\n");

  printf("\n");
  printf("  +-------+------+-----------+\n");
  printf("  |  DEC  |  HEX | Character |\n");
  printf("  +-------+------+-----------+\n");
  
  for(ch = min; ch <= max; ch++) {
    printf("  |  %03d  |  %02X  |     %c     |\n", ch, ch, ch);
  }
  
  printf("\nPress [ENTER] to exit...");
  getchar();

  return 0;
}
https://github.com/adamblaszczyk/ascii-codes 

Program da się skompilować pod Windows i Linux za pomocą gcc:

gcc ascii-codes.c -o ascii-codes -Wall

Przykładowe użycie programu:

ascii-codes
Wyświetla drukowalne znaki ASCII o kodach od 32 do 255,

ascii-codes 1
Wyświetla znaki ASCII o kodach od 1 do 255,

ascii-codes 174 181
Wyświetla znaki ASCII o kodach od 174 do 181.