【发布时间】: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