Ren*_*Ren 21 c gcc ascii control-characters
码:
int fd;
fd = open("fruit", O_WRONLY);
write(fd, "apple", sizeof("apple"));
close(fd);
Run Code Online (Sandbox Code Playgroud)
我用它编译它
$ gcc test.c -o test
Run Code Online (Sandbox Code Playgroud)
并运行
$ ./test
Run Code Online (Sandbox Code Playgroud)
然后我打开fruit文件,我在文件中看到以下内容:
apple^@
Run Code Online (Sandbox Code Playgroud)
什么^@意思?
Tho*_*key 38
这^@是ASCII NUL通常以可打印的形式表示的方式.这@与删除了一些位的字符相同:
@ = 0100
^@ = 0
Run Code Online (Sandbox Code Playgroud)
它与'\0'(C中的字符串终止符)相同.因为它是字符串终止符,所以你不会从它printf或它的相关函数中看到它,但是你可以使用面向块的方法来创建它write.例如,你可以写
write(fd,"apple\0orange",sizeof("apple\0orange"));
Run Code Online (Sandbox Code Playgroud)
并看到了
apple^@orange^@
Run Code Online (Sandbox Code Playgroud)
因为C中的每个双引号文字都有一个尾随字符串终止符,它的大小也是计算的.如果您打算在没有终结符的情况下编写字符串,那么您可以这样做:
const char *s = "apple";
write(fd,s,strlen(s));
Run Code Online (Sandbox Code Playgroud)
从而消除了示例中的两个问题:(a)不正确的长度和(b)通过确保两者是相同的项目可能使用不一致的字符串内容和长度.有关(a)的一些注释,请参见字符串文字的大小.
NUL是32个ASCII控制字符之一,其值范围从0到31,称为C0控件.所有这些ASCII控制字符通常以这种方式显示(对于可打印的形式),使用对应于将64(0100)添加到控制字符值的字符.
ASCII DEL为127(0177).显示它^?是一种比其他ASCII控制字符更新的特殊情况.例如,X/Open terminfo(curses)没有为这个角色定义可打印的形式,尽管它适用于其他角色.与其他ASCII控制字符不同,DEL是通过对所有(七)位进行OR运算形成的.
当然,ASCII是一个7位代码.制定了许多其他法规; ASCII对应于POSIX可移植字符集,因此经常遇到它.
通过Web搜索很容易找到ASCII字符表.大多数这些表格(或其随附的讨论)都会转向错误信息.这是一个名为ASCII字符集的合理事实页面的链接.它指出
Control键从它修改的键的值中减去 64.
但是,如果关键是那些从集合的一个语句是唯一正确的@,A,B等如果您应用到其它键,结果也许是有趣的,但没有用.相反,在C程序中,您将进行逻辑屏蔽,例如,
ch = ch & 037;
Run Code Online (Sandbox Code Playgroud)
获取0到31范围内的字符.
| 归档时间: |
|
| 查看次数: |
1522 次 |
| 最近记录: |