110,545
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 转全角的函数(SBC case)
/// </summary>
/// <param name="input">任意字符串</param>
/// <returns>全角字符串</returns>
///<remarks>
///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
///</remarks>
public static string ToSBC(string input)
{
//半角转全角:
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 32)
{
c[i] = (char)12288;
continue;
}
if (c[i] < 127)
c[i] = (char)(c[i] + 65248);
}
return new string(c);
}
/**/
/// <summary>
/// 转半角的函数(DBC case)
/// </summary>
/// <param name="input">任意字符串</param>
/// <returns>半角字符串</returns>
///<remarks>
///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
///</remarks>
public static string ToDBC(string input)
{
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 12288)
{
c[i] = (char)32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
c[i] = (char)(c[i] - 65248);
}
return new string(c);
}
// 字符串工具
sealed class StrUtl
{
// 把一个“unicode字符串”格式化为全角字符占2个位置的“普通字符串”
// width<0 表示左对齐,右边填空格
// width>0 表示右对齐,左边填空格
public static string StrFormat(string s, int width)
{
Encoding code = Encoding.Default;
byte [] bs = code.GetBytes(s);
bool leftAlign = (width < 0 ? true : false);
if (width < 0) width = - width;
if (bs.Length >= width) return s;
if (leftAlign) return s.PadRight(width-bs.Length+s.Length);
return s.PadLeft(width-bs.Length+s.Length);
}
}