在 C# 中将 (Javascript)TypedArray 字符串转换为 byteArray 的最佳方法
Posted
技术标签:
【中文标题】在 C# 中将 (Javascript)TypedArray 字符串转换为 byteArray 的最佳方法【英文标题】:Best way to convert a string of (Javascript)TypedArray to byteArray in C# 【发布时间】:2020-02-08 11:37:06 【问题描述】:我正在调用一个端点并返回string
(javascript 中的TypedArray)格式,如下面[12,44,36,132,22,19,99]
并希望将该字符串转换回byte[]
。
我正在使用
var byteData = Regex.Replace(fileData, @"\[*\]*", "").Split(',').Select(x => byte.Parse(x)).ToArray();
但只是想知道是否有更优雅的方法来做到这一点?谢谢大家
protected void downloadFile(string fileKey)
var url = _apiFileDataUrl + fileKey;
_filename = fileKey.Split('/').LastOrDefault();
Log.Information($"Endpoint hit: url");
var requestData = new HttpRequestMessage
Method = HttpMethod.Get,
RequestUri = new Uri(url)
;
requestData.Headers.Add("X-Auth", _x_auth);
requestData.Headers.Add("x-api-key", _x_api_key);
//requestData.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
var results = _client.SendAsync(requestData).Result;
if (results.StatusCode != HttpStatusCode.OK)
throw new Exception($"Campaign failure at fileKey fileKey \n\n (int)results.StatusCode: results.ReasonPhrase");
var fileData = results.Content.ReadAsStringAsync().Result;
if (fileData.Length > 0)
var byteData = Regex.Replace(fileData, @"\[*\]*", "").Split(',').Select(x => byte.Parse(x)).ToArray();
//var byteData = fileData.Replace("[", "").Replace("]", "").Split(',').Select(x => byte.Parse(x)).ToArray();
//var dt = DataTableHelper.CsvToDataTable(byteData, "\r\n",'|');
File.WriteAllBytes(DataFilePath + _filename, byteData);
【问题讨论】:
这只是用空字符串替换“[]”吗? Regex.Replace(fileData, @"[]", "") 我无法想象您会将 [[]] 或类似的东西发送到服务器的情况。除此之外,其余的对我来说都很好 【参考方案1】:或多或少,我会走和你一样的路。但是,对于这样一个简单的任务,我不会选择 Regex
路径。我的代码在必要时被注释了。
/// <summary>
/// Creates a byte array from the passed TypedArray in javascript.
/// </summary>
/// <param name="jsStringArray">TypedArray in javascript, like [12, 44, 36, 132, 22, 19, 99]</param>
/// <returns>Byte array created from passed string</returns>
private static byte[] StringArrayToByteArrayParser(string jsStringArray )
try
// // No need to use heavy Regex
var sb = jsStringArray.Substring(1, jsStringArray.Length - 2);
// Splits using , then converts into byte array
return sb.ToString().Split(',').Select(byte.Parse).ToArray();
catch(ArgumentOutOfRangeException outOfRange)
// Handle etc..
throw;
catch(Exception ex)
// Here catch your exceptions throw or handle
throw;
【讨论】:
不需要创建StringBuilder
的实例,因为string
本身就有Remove
,可以直接在jsStringArray
上使用。或者,更简单的是,您可以使用 jsStringArray.Substring(1, jsStringArray.Length - 2)
。
@Herohtar,我完全错过了子字符串。以上是关于在 C# 中将 (Javascript)TypedArray 字符串转换为 byteArray 的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 或 JavaScript 中将 DN 拆分并加入到来自 Active Directory 对象的路径
在 asp.net mvc razor 应用程序中将 Datetime C# 类型转换为 Date javascript