javascript - 在 C# 中将 (Javascript)TypedArray 字符串转换为 byteArray 的最佳方法
问题描述
我正在调用一个端点并返回一个格式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
为这样一个简单的任务走这条路。我的代码在必要时被注释了。
/// <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;
}
}
推荐阅读
- spring-cloud - 使用应用程序属性在 Spring Cloud Dataflow 中启动任务
- python - Python 比较 2 个 CSV - 平均 2 列
- android - 如何提醒用户本地数据库的新更新?
- java - onTextChanged 函数在保存编辑文本颜色时无法正常工作
- javascript - 根据对象数组中的第一个“行”重命名 JSON 键
- bash - 如何删除没有具有不同扩展名的匹配文件的文件
- java - 优化if-else语句android studio
- regular-language - 表明 NFA 接受的两种语言的交集是不可判定的
- processing - 预期目标的碰撞只是沿轴碰撞
- javascript - AbortError: play() 请求被对 pause() 的调用中断