【问题标题】:What is the equivalent function of NodeJS Buffer.from in C# .net core?C# .net core 中 NodeJS Buffer.from 的等效功能是什么?
【发布时间】:2021-03-25 02:53:06
【问题描述】:

我正在尝试将此 Node.js 函数转换为 C# 函数:

function getKey(name, publicKey, privateKey) {
    let key = $ {
        publicKey
    }: $ {
        name
    }: $ {
        (new Date()).getTime()
    }: $ {
        privateKey
    };
    return Buffer.from((key.match(/.{1,4}/g)).map(s => {
        return Buffer.from(s, "binary").toString("base64")
    }).join(""), "binary").toString("base64");
}

我似乎找不到返回 Buffer.From 的等效项并匹配 C#。

【问题讨论】:

  • 我认为 C# 中没有像 Buffer.from 这样的通用方法,因为您有一种更严格的类型系统 - 或者根本就没有;)。也许检查Encoding.UTF8.GetBytes()。 GetBytes 覆盖存在于所有编码实例中 - 大多数是在 Encoding 类中静态预定义的。对于 base64 编码/解码,有 System.Convert.ToBase64String()System.Convert.FromBase64String()
  • ic 感谢您的信息,key.match() 部分怎么样?这是一个正则表达式吗?
  • 是的,看起来像一个允许 1-4 个字符的正则表达式,不管是哪个。 “/g” 表示全局并告诉正则表达式在第一次匹配后不返回。所以基本上这个正则表达式似乎创建了一个包含字符串的列表,每个字符串至少 1 个,最多 4 个字符长。 -> 14 个字符的字符串将被拆分为 3 个 4 个字符的字符串和一个 2 个字符的字符串
  • 感谢您的澄清。带有 lambda 的映射被链接到一个匿名函数。我会假设它会为匹配集中的每个元素执行该功能是否正确?假设这只是返回映射元素的有序连接 base64conversions 是否正确?
  • 我不是 nodejs/js 方面的专家,所以我只能代表 kotlin/java/c# - 在所有这些语言中,map 通常用于使用给定函数转换数据。这里看起来它使用Buffer.from(s, "binary").toString("base64") 将正则表达式匹配的每个元素转换为字符串,其中s 是正则表达式的单个匹配条目。

标签: c# node.js data-conversion


【解决方案1】:

经过上述交流,我能够在 C# 中转换函数。感谢@Dominik 的惊人建议。它提供与 NodeJS 函数完全相同的结果,只是在 c# 结果的末尾有几个 '=' 字符。

public static async Task<string> getkey(string name, string publicKey, string privateKey)
        {
            string keyString = $"{publicKey}:{name}:{getEpoch().ToString()}:{privateKey}";
            
            Regex regmap = new Regex(".{1,4}");
            string concat64 = string.Empty;
            var mt = regmap.Matches(keyString);

            foreach(Match m in mt)
            {
                string converted = System.Convert.ToBase64String(Encoding.UTF8.GetBytes(m.Value));
                concat64 += converted;
            }

            string finVal = System.Convert.ToBase64String(Encoding.UTF8.GetBytes(concat64));

            return finVal;
        }

【讨论】:

  • 你可能想看看StringBuilder来替换concat64 += converted
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多