Writing ASCII to file
Solution 1
This code will show you the printable characters:
#include<iostream>
#include<iomanip>
#include<string>
int main() {
std::cout<<std::setw(3)<<"dec "
<<std::setw(3)<<"oct "
<<std::setw(3)<<"hex "
<<std::setw(3)<<"chr"
<<std::endl;
for(unsigned int id=0; id<255; id++) {
char c = char(id);
if(std::isprint(c)){
std::cout<<std::dec<<std::setw(3)<<id<<" "
<<std::oct<<std::setw(3)<<id<<" "
<<std::hex<<std::setw(3)<<id<<" "
<<std::setw(3)<<c<<std::endl;
}
}
return 0;
}
Output:
dec oct hex chr
32 40 20
33 41 21 !
34 42 22 "
35 43 23 #
36 44 24 $
37 45 25 %
38 46 26 &
39 47 27 '
40 50 28 (
41 51 29 )
42 52 2a *
43 53 2b +
44 54 2c ,
45 55 2d -
46 56 2e .
47 57 2f /
48 60 30 0
49 61 31 1
50 62 32 2
51 63 33 3
52 64 34 4
53 65 35 5
54 66 36 6
55 67 37 7
56 70 38 8
57 71 39 9
58 72 3a :
59 73 3b ;
60 74 3c <
61 75 3d =
62 76 3e >
63 77 3f ?
64 100 40 @
65 101 41 A
66 102 42 B
67 103 43 C
68 104 44 D
69 105 45 E
70 106 46 F
71 107 47 G
72 110 48 H
73 111 49 I
74 112 4a J
75 113 4b K
76 114 4c L
77 115 4d M
78 116 4e N
79 117 4f O
80 120 50 P
81 121 51 Q
82 122 52 R
83 123 53 S
84 124 54 T
85 125 55 U
86 126 56 V
87 127 57 W
88 130 58 X
89 131 59 Y
90 132 5a Z
91 133 5b [
92 134 5c \
93 135 5d ]
94 136 5e ^
95 137 5f _
96 140 60 `
97 141 61 a
98 142 62 b
99 143 63 c
100 144 64 d
101 145 65 e
102 146 66 f
103 147 67 g
104 150 68 h
105 151 69 i
106 152 6a j
107 153 6b k
108 154 6c l
109 155 6d m
110 156 6e n
111 157 6f o
112 160 70 p
113 161 71 q
114 162 72 r
115 163 73 s
116 164 74 t
117 165 75 u
118 166 76 v
119 167 77 w
120 170 78 x
121 171 79 y
122 172 7a z
123 173 7b {
124 174 7c |
125 175 7d }
126 176 7e ~
Solution 2
Not all characters are printable. You could use isprint() to check if a character is printable; if not you have to print another (ex. '.') char:
file << ((isprint(i))? char(i) : '.');
Solution 3
For reference, see ASCII and Extended ASCII.
RE: Also sometimes "gedit" doesn't even recognize the encoding standard.
I also highly recommend The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!).
From the above article, in particular note the following which is relevant to your question:
In the ANSI standard, everybody agreed on what to do below 128, which was pretty much the same as ASCII, but there were lots of different ways to handle the characters from 128 and on up, depending on where you lived. These different systems were called code pages.
So, how the characters from 128 through 255 are portrayed in an application such as gedit
entirely depends on what code page is active. Perhaps it's one of these two:
Some popular encodings of English text are Windows-1252 (the Windows 9x standard for Western European languages) and ISO-8859-1, aka Latin-1 (also useful for any Western European language).
Also, please keep in mind that most modern applications have moved away from code pages altogether in favor of Unicode. The most commonly used encodings for Unicode are UTF-8 and UTF-16. Therefore, it is possible that gedit
supports Unicode as well. From the ASCII link above:
To allow backward compatibility, the 128 ASCII and 256 ISO-8859-1 (Latin 1) characters are assigned Unicode/UCS code points that are the same as their codes in the earlier standards. Therefore, ASCII can be considered a 7-bit encoding scheme for a very small subset of Unicode/UCS, and ASCII (when prefixed with 0 as the eighth bit) is valid UTF-8.
Comments
-
Davlog over 1 year
I've been thinking about an easy way for a programmer to write down all ASCII characters. First I tried to print it in a console but it didn't show me all characters. So I tried to write it to a file which worked first but now doesn't.
Code :
#include <iostream> #include <fstream> using namespace std; int main() { fstream file; file.open("/home/david/Desktop/ascii.txt", ios_base::out); for(int i = 0; i <= 255; i++) file << char(i); file.close(); return 0; }
The normal ASCII Table has 128 and the extend Table has 127. So together there are 255 characters. But somehow it doesn't save all characters to the file. Also sometimes "gedit" doesn't even recognize the encoding standard.
What am I doing wrong?