在C#中 汉字占位1个字符 在C中占位2个
现在要求输入60个字符 也就是说 我在 C#中 输入“一句话”是3个字符
但是在C中是6个 那么 现在需要从 C#中进行判断 进入到C 中 必须满足60个字符 不够的字符补充一些空格进行占位 我需要补充44个空格 一个空格1位字符
这个 程序怎么写 急急啊
using System;
using System.Text;
class Program
{
// 右对齐字符串中的字符,在左边用空格填充以达到指定的总长度,一个中文字符按两个宽度计算。
static string CPadLeft(string s, int totalWidth)
{
int slen = Encoding.GetEncoding("GB18030").GetByteCount(s);
if (slen >= totalWidth) return s;
return new string(' ', totalWidth - slen) + s;
}
// 左对齐字符串中的字符,在右边用空格填充以达到指定的总长度,一个中文字符按两个宽度计算。
static string CPadRight(string s, int totalWidth)
{
int slen = Encoding.GetEncoding("GB18030").GetByteCount(s);
if (slen >= totalWidth) return s;
return s + new string(' ', totalWidth - slen);
}
static void Main()
{
string input = "一句话";
Console.WriteLine("[{0}]", CPadLeft (input, 10));
Console.WriteLine("[{0}]", CPadRight(input, 10));
}
}
判断字条长度(C#):
System.Text.Encoding.Default.GetByteCount(strString)
通过上面的方法,“一句话”的占位就是6个字符了
另外“一句话”在C#中占位也是6个字符。。。
如果用utf-8编码,一个中文、英文字符都占两个字节。
一个参考方法:
using System.Text.RegularExpressions;
using System.Text;
/// <summary>
/// 字符串长度(按字节算)
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
static int StrLength(string str)
{
int len = 0;
byte[] b;
for (int i = 0; i < str.Length; i++)
{
b = Encoding.Default.GetBytes(str.Substring(i,1));
if (b.Length > 1)
len += 2;
else
len++;
}
return len;
}
/// <summary>
/// 截取指定长度字符串(按字节算)
/// </summary>
/// <param name="str"></param>
/// <param name="length"></param>
/// <returns></returns>
static string StrCut(string str, int length)
{
int len = 0;
byte[] b;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.Length; i++)
{
b = Encoding.Default.GetBytes(str.Substring(i, 1));
if (b.Length > 1)
len += 2;
else
len++;
if (len >= length)
break;
sb.Append(str[i]);
}
return sb.ToString();
}
深入理解字符、字节。
所谓字符,如‘A’,是显示给人看的。在计算机中,并不需要看‘A’长成什么样子,计算机只需要关心怎么存储,怎么读取——所以计算机存储的是二进制。
那么在显示器与存储之间,就需要一个沟通的法则——这就是字符集编码
不同的规范,包含字符的范围不一样。
ASCII,用1个字节存储一个字符,可表示的范围为2^8个字符,但实际好像只用0-127
显示器在显示的时候,读一个字节,就查找相应的字符,显示在屏幕上——实际计算机的处理过程可能更优雅
.net中使用的是Unicode,也就是在内存中,字符‘A’,使用2字节的内存{0x41, 0x00}
c语言中,使用的是ASCII,显示中文字符要特别处理一下
c#中汉字也是2个占位