在 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 【问题描述】:

我正在调用一个端点并返回stringjavascript 中的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

如何在 C# 中将数据发送到 ASP.NET Core MVC 控制器?

在 C# 中将数据表转换为 JSON

如何在 C# 函数中将 jquery 变量作为参数传递

在 C# 中将 HTML 实体转换为 Unicode 字符