C#中怎样定义单字节字符 char 不就是保存单个字节的字符吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 char定义的不是unicode编码方式的字符吗?unicode字符都是双字节的啊! http://ks.examda.com/exam/?PaperID=3533Type ac = Type.GetTypeFromProgID("Word.Application"); System.Reflection.Assembly assem = System.Reflection.Assembly.GetAssembly(ac); Type eStat = assem.GetType("Microsoft.Office.Interop.Word.WdStatistic"); Array arr = Enum.GetValues(eStat); for(int i=0; i<arr.Length; i++) { MessageBox.Show(arr.GetValue(i).ToString()); } .NET中不存在单字节字符,所有字符字符串都是UTF-16编码...只有在byte,byte[],stream和文件、数据库等其他介质中才能存在... byte 我感觉你这句话有点矛盾.NET 不存在单字节字符 后面的byte ...也是.NET中的数据类 byte是字符吗?你不能因为鸡蛋可以孵鸡就把鸡蛋叫做鸡... 那么C语言中的char类型是不是单字节字符呢? 最近看了这个帖子:http://topic.csdn.net/u/20090317/12/6D7315A7-BAD2-4A30-8F94-584AFA40E00D.html在做这一题:http://acm.timus.ru/problem.aspx?space=1&num=1102倒是有些体会。因为该题的要求是:时间限制是1秒,内存限制16M。字符串总长度不超过10^7个字符。如果用 Console.ReadLine() 读入 Unicode 的 char 组成的 string 话,会导致 Memory limit exceeded。后来我就采用了 byte[] 来存储输入的字符串(131楼的C#程序),取得了成功: Stream r = Console.OpenStandardInput(); byte[] p = new byte[n]; int l = r.Read(p, 0, n); 当然,这是有前提的,那个问题中的输入字符串都是由小写的拉丁字母组成的(Each string consists of small Latin letters),所以可以用 byte[] 来存储。 char 是单字符,在 C# 中不是单字节的。char 在 C/C++ 中是单字节的,在 C# 中不是。 class Program{ static void Main() { System.Console.WriteLine(sizeof(char)); // 输出:2 }}#include <stdio.h>void main(){ printf("%d\n", sizeof(char)); // 输出:1} 基础不扎实啊,单字符和单字节字符是两个完全不同的概念...这个是历史问题...科普一下吧...计算机世界是以美国为首的英语系国家发明并推动发展的,在C、C++最初的设计中就没有考虑那些非英语系国家,更何况当时还是红色阵营的中国和苏联...而且计算机硬件的价格贵的吓死人,资源不能为了几个字符而浪费...所以最初的字符只需要26个英文字母加标点符号再加一些控制符,128个bit都绰绰有余,这就是ASCII字符集...后来又扩展了一些字符,256个bit都用不完,256bit就是一个byte,所以叫单字节字符...后来当然是在非英语系国家巨大的市场诱惑下,不得不考虑其他文字...256bit远远不够,于是为不同国家的文字创造不同的字符集,比如GB2312...这就是琳琅满目的双字符字符集...后果是一个软件为了能在多个不同语系的国家销售开发人员不得不为不同的国家开发不同的版本...再后来计算机硬件的成本和白菜豆腐一个价了,不需要再为了节省几个字节而浪费开发人员的脑细胞,人力成本远远高于硬件成本...于是多字节Unicode字符集诞生了...所以诞生较晚的Java和.NET都是完全的Unicode平台,不再有单字节和多字节之分,支持之前的单字节双字节字符集仅仅是为了兼容老旧的系统... 128个bit 应该是:7个bit = 128种状态(或者128个不同的字符)256bit就是一个byte 应该是:8bit就是一个byte,可以表示256种状态(或者256个不同的字符) bit = (二进)位byte = 字节 以前还真没有注意,byte应该是字节。char应该是字符,string,应该是字符串。 可以看看这篇文章:《.Net与字符编码(理论篇)》http://www.cnblogs.com/baoquan/archive/2007/12/04/981721.html 使用byte吧单字节使用8bit,单个字符在保存时就是一八位数字。关键看你怎么解释它,你把它当数值它就是数值,你把它当字符它就是相应的字符 ASCII是单字节吧?那用Byte好了,Ecoding.ASCII C#新手几个小问题 [winForm窗体控件的动态创建问题] guid 为啥每次都改变 关于保留2位小数 关于在.NET每个页面调用同一段代码 求一SQL语句 如何在运行时获得所有的特定实例 ADO.NET 高手请进 请问如何把自己设为无边框页 treeview 一个读取数据后显示样式的难题 在线等
Type ac = Type.GetTypeFromProgID("Word.Application");
System.Reflection.Assembly assem = System.Reflection.Assembly.GetAssembly(ac);
Type eStat = assem.GetType("Microsoft.Office.Interop.Word.WdStatistic");
Array arr = Enum.GetValues(eStat);
for(int i=0; i<arr.Length; i++)
{
MessageBox.Show(arr.GetValue(i).ToString());
}
在做这一题:http://acm.timus.ru/problem.aspx?space=1&num=1102
倒是有些体会。因为该题的要求是:时间限制是1秒,内存限制16M。字符串总长度不超过10^7个字符。
如果用 Console.ReadLine() 读入 Unicode 的 char 组成的 string 话,会导致 Memory limit exceeded。后来我就采用了 byte[] 来存储输入的字符串(131楼的C#程序),取得了成功: Stream r = Console.OpenStandardInput();
byte[] p = new byte[n];
int l = r.Read(p, 0, n);
char 是单字符,在 C# 中不是单字节的。char 在 C/C++ 中是单字节的,在 C# 中不是。
{
static void Main()
{
System.Console.WriteLine(sizeof(char)); // 输出:2
}
}
#include <stdio.h>void main()
{
printf("%d\n", sizeof(char)); // 输出:1
}
256bit就是一个byte 应该是:8bit就是一个byte,可以表示256种状态(或者256个不同的字符)
byte = 字节
单字节使用8bit,单个字符在保存时就是一八位数字。关键看你怎么解释它,你把它当数值它就是数值,你把它当字符它就是相应的字符