http://msdn.microsoft.com/fr-fr/library/system.io.stream.read.aspx
buf 是一个 byte[] 数组,一旦方法返回,它就会包含您刚刚读取的数据。BUFFER_SIZE 是您要读取的数据的大小。如果要读取单个字节,BUFFER_SIZE=1。如果你想读取一千字节的数据,BUFFER_SIZE=1024 等。注意,如果你要求一个太大的缓冲区(例如,当数据为 1KB 时要求 1MB),这并不重要。它将读取一个 KB,然后返回。
您的最终字符串应该如下所示,除非 XE.com 决定更改它:
XE.com:美元兑欧元汇率:1.00 美元 = 0.716372 欧元
您可以使用 String 方法去除不需要的东西:整个第一部分
(XE.com: USD to EUR rate:)
只需使用您的数据构建一个字符串即可轻松删除:
(string header = "XE.com: {0} to {1} rate:", currency1, currency2)
,然后调用String.Replace(header, '')
。从那里,您可以调用String.Split('=')
,在 '=' 符号处拆分,然后从拆分的字符串中删除货币部分(再次,String.Replace()
),最后调用Double.TryParse()
注意:codesparkle 的方法更简单,因为您基本上跳过了第 1 步。但是 XE.com 没有提供 API:您不能保证返回的字符串是有效的,或者将来某天不会改变。
好的,这里有一些代码:
private double GetConvertedCurrencyValue(string inputCurrency, string outputCurrency, double value)
{
string request = String.Format(http://www.xe.com/ucc/convert.cgi?Amount={0}&From={1}&To={2}", value, inputCurrency, outputCurrency);
System.Net.WebClient wc = new System.Net.WebClient();
string apiResponse = wc.DownloadString(request); // This is a blocking operation.
wc.Dispose();
/* Formatting */
// Typical response: "XE.com: curr1 to curr2 rate: x curr1 = y curr2"
// The first part, up until "x curr1" is basically a constant
string header = String.Format("XE.com: {0} to {2} rate:" inputCurrency, outputCurrency);
// Removing the header
// The response now looks like this: x curr1 = y curr2
apiResponse = apiResponse.Replace(header, "");
// Let's split the response at '=', to retrieve the right part
string outValue = apiResponse.Split('=')[1];
// Getting rid of the 'curr2' part
outValue = outValue.Replace(outputCurrency, "");
return Double.Parse(outValue, System.Globalization.CultureInfo.InvariantCulture);
}