4、字符、数字之间转换

一、(int)、int.Parse、int.tryParse、Convert.ToInt32的区别?

Convert.ToInt32 与 int.Parse 较为类似,实际上 Convert.ToInt32 内部调用了 int.Parse:

Convert.ToInt32 参数为 null 时,返回 0; int.Parse 参数为 null 时,抛出异常。

Convert.ToInt32 参数为 "" 时,抛出异常; int.Parse 参数为 "" 时,抛出异常。

Convert.ToInt32 可以转换的类型较多; int.Parse 只能转换数字类型的字符串。

int.TryParse 与 int.Parse 又较为类似,但它不会产生异常,转换成功返回 true,转换失败返回 false。最后一个参数为输出值,如果转换失败,输出值为 0。

(int) 属 cast 转换,只能将其它数字类型转换成 int 类型,它不能转换字符串,比如下例就会失败:

string v = "1";  int n = (int)v;

二、ToString()、Convert.ToString()、(string)、as string 的区别

通常object到 string有四种方式(假设有object obj):obj.ToString()、Convert.ToString()、(string)obj、obj as string。他们都能将 object 对象转换成 string 对象。我就讲讲他们的异同以及在实际中应该使用哪个。

前两个方法通常是由别的对象得到 string 对象,它们间的区别只表现在要转换的对象为 null 时,如果 obj 为 null,调用 obj.ToString 方法会导致 NullReferenceException 异常,调用 Convert.ToString 不会抛出异常而返回一个 null。

用强制转换 (string)obj 要求 obj 的运行时类型必须是 string。如果不是,就会抛出异常。用 as 方法则会相对平稳,当 obj 的运行时类型不是 string 时会返回 null 而不抛出异常。

所以在通常在我们需要得到某个对象的 string 表达形式时,我们应该使用 ToString 和 Convert.ToString,这时候你就得根据情形选一个,假如你能保证你的对象不为 null,则两个差不多。如果有可能为 null,你就应该用 Convert.ToString,如果你希望它为 null 的时候抛出异常,那么当然可以选择 ToString。

三、C# 中String和 Stringbuilder的区别

String 对象是不可改变的。每次使用 String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。而 StringBuilder 则不会,在需要对字符串执行重复修改的情况下,创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类;例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

1、设置容量与长度

StringBuilder   MyStringBuilder   =   new   StringBuilder("Hello   World!",   25);   方式1
MyStringBuilder.Capacity   =  
25;  方式2
EnsureCapacity   方法可用来检查当前   StringBuilder  
的容量。如果容量大于传递的值,则不进行任何更改;但是,如果容量小于传递的值,则会更改当前的容量以使其与传递的值匹配。  
也可以查看或设置  
Length   属性。如果将   Length  
属性设置为大于  
Capacity   属性的值,则自动将   Capacity  
属性更改为与  
Length   属性相同的值。如果将   Length  
属性设置为小于当前  
StringBuilder   对象内的字符串长度的值,则会缩短该字符串。

2、
修改 StringBuilder  字符串

方法名                                    使用 
StringBuilder.Append                将信息追加到当前 StringBuilder 的结尾
StringBuilder.AppendFormat         用带格式文本替换字符串中传递的格式说明符
StringBuilder.Insert                      将字符串或对象插入到当前 StringBuilder 对象的指定索引处
StringBuilder.Remove                从当前 StringBuilder 对象中移除指定数量的字符
StringBuilder.Replace                    替换指定索引处的指定字符
Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。下面的示例将一个 StringBuilder 对象初始化为“Hello World”,然后将一些文本追加到该对象的结尾处。将根据需要自动分配空间。
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

MyStringBuilder.Append(" What a
beautiful day.");

Console.WriteLine(MyStringBuilder);
//此示例将 Hello World!
What a beautiful day. 显示到控制台。
AppendFormat 方法将文本添加到 StringBuilder 的末尾,而且实现了 IFormattable 接口,因此可接受格式化部分中描述的标准格式字符串。可以使用此方法来自定义变量的格式并将这些值追加到 StringBuilder 的后面。下面的示例使用 AppendFormat 方法,将一个设置为货币值格式的整数值放到 StringBuilder 的末尾。

int MyInt = 25;

StringBuilder MyStringBuilder = new
StringBuilder("Your total is ");

MyStringBuilder.AppendFormat("{0:C}
", MyInt);

Console.WriteLine(MyStringBuilder);

//此示例将 Your total is $25.00 显示到控制台。
Insert 方法将字符串或对象添加到当前 StringBuilder 中的指定位置。下面的示例使用此方法将一个单词插入到 StringBuilder 的第六个位置。

StringBuilder MyStringBuilder = new
StringBuilder("Hello World!");

MyStringBuilder.Insert(6,
"Beautiful ");

Console.WriteLine(MyStringBuilder); 
//此示例将 Hello Beautiful
World! 显示到控制台。
Remove 方法从当前 StringBuilder 中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。下面的示例使用 Remove 方法缩短 StringBuilder。

StringBuilder MyStringBuilder = new
StringBuilder("Hello World!");

MyStringBuilder.Remove(5, 7);

Console.WriteLine(MyStringBuilder);

//此示例将 Hello 显示到控制台。

使用 Replace 方法,可以用另一个指定的字符来替换 StringBuilder 对象内的字符。下面的示例使用 Replace 方法来搜索 StringBuilder 对象,查找所有的感叹号字符 (!),并用问号字符 (?) 来替换它们。

StringBuilder MyStringBuilder = new
StringBuilder("Hello World!");

MyStringBuilder.Replace(‘!‘, ‘?‘);

Console.WriteLine(MyStringBuilder);

//此示例将 Hello World? 显示到控制台。

3、将Stringbuilder串转换为string形式

string = StringBuilder.toString();

四、            
字符串格式化汇总:


C


货币


2.5.ToString("C")


¥2.50


D


十进制数


25.ToString("D5")


00025


E


科学型


25000.ToString("E")


2.500000E+005


F


固定点


25.ToString("F2")


25.00


G


常规


2.5.ToString("G")


2.5


N


数字


2500000.ToString("N")


2,500,000.00


X


十六进制


255.ToString("X")


FF

formatCode 是可选的格式化代码字符串。
必须用“{”和“}”将格式与其他字符分开。如果恰好在格式中也要使用大括号,可以用连续的两个大括号表示一个大括号,即: “{{”或者“}}”。

常用格式举例:
(1) int i=12345;
this.textBox1.Text=i.ToString();
//结果 12345(this指当前对象,或叫当前类的实例)
this.textBox2.Text=i.ToString("d8");  //结果 00012345
(2) int i=123;
double j=123.45;
string s1=string.Format("the value is {0,7:d}",i);
string s2=string.Format("the value is {0,7:f3}",j);
this.textBox1.Text=s1 ;   //结果 the value is 123
this.textBox2.Text=s2;   //结果 the value is 123.450
(3)double i=12345.6789;
this.textBox1.Text=i.ToString("f2"); //结果 12345.68
this.textBox2.Text=i.ToString("f6");//结果 12345.678900
(4)double i=12345.6789;
this.textBox1.Text=i.ToString("n"); //结果 12,345.68
this.textBox2.Text=i.ToString(“n4”); //结果 12,345.6789
(5)double i=0.126;
string s=string.Format("the value is {0:p}",i);
this.textBox1.Text=i.ToString("p"); //结果 12.6%
this.textBox2.Text=s; //结果 the value is 12.6%
(6) DateTime dt =new DateTime(2003,5,25);
this.textBox1.Text=dt.ToString("yy.M.d"); //结果 03.5.25
this.textBox2.Text=dt.ToString(“yyyy年M月”);//结果 2003年5月
Convert.ToDateTime("2005/12/22 22:22:22").ToString("yyyy/MM/dd HH:mm:ss")
"2005/12/22 22:22:22"
(7) int i=123;double j=123.45;
string s=string.Format("i:{0,-7},j:{1,7}",i,j); //-7表示左对齐,占7位
this.textBox1.Text=s ;    //结果i:123 ,j: 123.45

(8) string
s7 = String.Format("{0:(###) ###-####}", 8005551212)

//生成(800) 555-1212

int a = 12345678;double b = 1234.12543;

string s8=
String.Format("abcd{0:C}abcd", b);//abcd¥1,234.13abcd

string s9 = "abcd" + b.ToString("C") +
"abcd";//abcd¥1,234.13abcd

string s10 = String.Format("{0:C3}", b);//¥1,234.125

string s11 = b.ToString("C3");//¥1,234.125

string s12 = String.Format("{0:d}", a);//十进制--12345678

string s14 = String.Format("{0:e}", a);//指数--1.234568e+007

string s16 = String.Format("{0:f}", a);//定点数--12345678.00

string s18 = String.Format("{0:n}", a);//数值--12,345,678.00

string s20 = String.Format("{0:x}", a);//十六进制--bc614e

string s22 = String.Format("{0:g}", a);//通用为最紧凑—12345678

b = 4321.12543;a = 1234;

string s24 = String.Format("{0:000000}", a);// 001234

string s25 = String.Format("{0:000000}", b);// 004321

//# 描述:占位符,如果可能,填充位

string s26 = String.Format("{0:#######}", a);// 1234

string s27 = String.Format("{0:#######}", b);// 4321

string s28 = String.Format("{0:#0####}", a);// 01234

string s29 = String.Format("{0:0#0000}", b);// 004321

//. 描述:小数点

string s30 = String.Format("{0:000.000}", a);//1234.000

string s31 = String.Format("{0:000.000}", b);//4321.125

b = 87654321.12543;a = 12345678;

//, 描述:数字分组,也用于增倍器

string s32 = String.Format("{0:0,00}", a);// 12,345,678

string s33 = String.Format("{0:0,00}", b);// 87,654,321

string s34 = String.Format("{0:0,}", a);// 12346

string s35 = String.Format("{0:0,}", b);// 87654

string s36 = String.Format("{0:0,,}", a);// 12

string s37 = String.Format("{0:0,,}", b);// 88

string s38 = String.Format("{0:0,,,}", a);// 0

string s39 = String.Format("{0:0,,,}", b);// 0

//   % 描述:格式为百分数

string s40 = String.Format("{0:0%}", a);// 1234567800%

string s41 = String.Format("{0:#%}", b);// 8765432113%

string s42 = String.Format("{0:0.00%}", a);// 1234567800.00%

string s43 = String.Format("{0:#.00%}", b);// 8765432112.54%

四、如何进行字节数组和字符串的相互转换?

将字符串转换为字节数组时,需要调用System.Text.Encoding命名空间中各种编码类的GetBytes方法,而将字节数组转换为字符串时,则需要调用System.Text.Encoding命名空间中的各种编码的GetString方法。例如:

namespace
ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

string s =
"nbjjjlljjoijio";

byte[] bytes =
Encoding.Default.GetBytes(s);

string ss = string.Empty;

for (int i = 0; i <
bytes.Length; i++)

{

ss += bytes[i].ToString();

}

Console.WriteLine(ss);

ss =
Encoding.Default.GetString(bytes);

Console.WriteLine(ss);

}

}

}

五、把一个整数分解成2的次幂

namespace WindowsFormsApplication1

{

public partial
class Form1 : Form

{

public
Form1()  {InitializeComponent();}

private
List<int> tempList = new List<int>();

private void
button1_Click(object sender, EventArgs e)

{

tempList.Clear();  listBox1.Items.Clear();

int
intValue = Convert.ToInt32(textBox1.Text.Trim());

GetList(intValue);

foreach
(int i in tempList)

listBox1.Items.Add(i);

}

private void
GetList(int value)

{

if (value
== 0)

return;

for (int i
= value; i > 0; i--)

{

if ((i
& (i - 1)) == 0)//如果是2的次

{//幂则与本身的下位相与为0

tempList.Add(i);

GetList(value - i);

break;

}

}

}

}

}

将字符串 1234||1123||2344||123||567按||分成数组:

String ss=” 1234||1123||2344||123||567”;

string[] mobileArray=ss.Replace(“||”,”,”).Split(‘,’);

五、字母和ASCII的转换。

namespace
WindowsFormsApplication2

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void btnToASC_Click(object
sender, EventArgs e)

{

if (txtChar.Text != string.Empty)

{

if
(Encoding.GetEncoding("unicode").GetBytes(new char[]
{txtChar.Text[0]})[1] == 0)

{

txtToASC.Text =
Encoding.GetEncoding("unicode").GetBytes(txtChar.Text)[0].ToString();

//得到ASCII值

}

else

{

txtToASC.Text =
""; MessageBox.Show("请输入字母","提示");

}

}

}

private void btnToChar_Click(object sender,
EventArgs e)

{

if (txtASC.Text != string.Empty)

{

int intNum;

if (int.TryParse(txtASC.Text,
out intNum))

{//将ASCII转换为字符。

txtToChar.Text =((char)intNum).ToString();

}

}

}

}

}

六、汉字和区位码之间的转换。

过程:通过Encoding对象的GetBytes方法得到汉字的字节数组,将字节数的第一位和第二位分别转为整形数值,然后将得到的两个整形数值分别减160后转换为字符串,连接两个字符串就组成了汉字区位码。

namespace ChineseCode

{

public partial class Frm_Main : Form

{

public Frm_Main()

{

InitializeComponent();

}

private void btn_Get_Click(object
sender, EventArgs e)

{

if (txt_Chinese.Text !=
string.Empty)//判断输入是否为空

{

try

{

txt_Num.Text =
getCode(txt_Chinese.Text);

}

catch (IndexOutOfRangeException
ex)

{

MessageBox.Show(ex.Message
+ "请输入正确的汉字", "出错!");

}

}

}

/// <summary>

/// 得到汉字区位码方法

/// </summary>

/// <param
name="strChinese">汉字字符</param>

/// <returns>返回汉字区位码</returns>

public string getCode(string Chinese)

{

byte[] P_bt_array =
Encoding.Default.GetBytes(Chinese);//得到汉字的Byte数组

int front = (short)(P_bt_array[0] -
‘\0‘);//将字节数组的第一位转换成short类型

int back = (short)(P_bt_array[1] -
‘\0‘);//将字节数组的第二位转换成short类型

return (front - 160).ToString() +
(back - 160).ToString();//计算并返回区位码

}

}

}

时间: 2024-10-14 16:28:03

4、字符、数字之间转换的相关文章

python中的字符数字之间的转换函数

int(x [,base ])         将x转换为一个整数 long(x [,base ])        将x转换为一个长整数 float(x )               将x转换到一个浮点数 complex(real [,imag ])  创建一个复数 str(x )                 将对象 x 转换为字符串 repr(x )                将对象 x 转换为表达式字符串 eval(str )              用来计算在字符串中的有效Py

字符串和字符数组之间的转换

package String; /* * 写了一个字符串和字符数组之间转换的例子 * 总结:将字符串转变为字符数组 :public char[] toCharArray() * 直接将一个字符数组变成一个字符串 public String (char[] value) 这个是构造函数啊,可以直接new 并为属性赋值啊. */ public class StringDemo2 { public static void main(String[] args) { String s = "hellow

C++字符串类型和数字之间的转换

转载:http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621803.html 1.字符串数字之间的转换 字符串---字符数组(1)string --> char *   string str("OK");   char * p = str.c_str(); 字符数组---字符串(2)char * -->string   char *p = "OK";   string str(p); 字符数组--

字符串和数字之间的转换(Unicode)

1 Unicode编码的字符串转换为数字类型 CString str; str = _T("1234"); int i = _ttoi(str); float f = _tstof(str); 2 数字转换为wchar_t wchar_t c[10]; int num = 100; _itow_s(num,c,10,10进制); wstring str(c); 3 wstring 转换为int wstring str; _wtoi(str.c_str); 那么究竟什么是Unicode?

Delphi字符串、PChar与字符数组之间的转换

来自:http://my.oschina.net/kavensu/blog/193719 ----------------------------------------------------------------- var s: string; p: pchar; a: array[1..20] of char; 1.字符串 ---> PChar p := PChar(s); 2.PChar ---> 字符串 s := p; 3.PChar ---> 字符数组 StrCopy(@a

字符串与数字之间的转换

1. itoa itoa是广泛应用的非标准c语言扩展函数,头文件为 #icnlude<stdlib.h> char* itoa(int value,char* string,int radix); #include<iostream> #include<cstdlib> using namespace std; int main(){ int i=15; char str[25]; itoa(i,str,16); cout<<str<<endl;

《Python CookBook2》 第一章 文本 - 每次处理一个字符 &amp;&amp; 字符和字符值之间的转换

文本 - 总结: 什么是文本Python 中的string 类型是不可变类型.文本,一个字符的矩阵,每一个单独的文本快可以被缩进和组织起来. 基本的文本操作①解析数据并将数据放入程序内部的结构中:②将数据以某种方式转化为另一种相似的形式,数据本身发生了改变:③生成全新的数据 每次处理一个字符: 任务用每次处理一个字符的方式处理字符串. 解决方案可以创建一个列表,列表的子项是字符串的字符.代码如下: >>> thelist = list('thestring') >>>

C++ 11特性中string与数字之间的互相转换

在写C++时经常会遇到字符串string与int等数字之间的相互转化,在java这种语言特性特别丰富的语言中能够通过Integer和String包装类中的函数parseInt和valueOf等函数轻松转换,而在C++中一直没有特别好的处理办法. 在之前的经历中,我都是通过C++中的字符串流stringstream来进行转换的,即通过如下函数: 1 int str2int(string input){ 2 stringstream ss; 3 ss<<input; 4 int res; 5 ss

字符串/数字之间类型转换总结

1.char向int转换 方法一:(适用于单个字符) char ch = '6'; int num = ch - '0';   //此时num=6 方法二:(适用于字符串) 函数atoi: int atoi ( const char * str ); 参数是一个char类型的数组,不能是单个char变量 char str[10] = "32352"; int num = atoi(str); 方法三:  sscanf(str,"%d",&a);  其中str