gpt4 book ai didi

c# - 字符串到 byte[] - c# 的行为类似于 java

转载 作者:行者123 更新时间:2023-12-01 06:20:43 25 4
gpt4 key购买 nike

Possible Duplicate:
.NET String to byte Array C#

我需要将字符串转换为字节[]。如果是这样的话,任务就很简单了。我需要用 C# 编写它,但我需要它像 Java 一样运行。

我发现两个问题:

字节序:Java 在内部将内容存储为 Big Endian,而 .NET 默认情况下为 Little Endian。

有符号性:C# 字节是无符号的。 Java 字节已签名。

如何获取一个 UTF-8 字符串,并获得一个与 Java 中的字符串相匹配的 byte[]。

为了提供更多上下文,我有这两个函数(一个在 java 中,一个在 c# 中),它们创建不同的哈希值,我怀疑这是由于 .net 与 java 中字节表示的差异所致。Java:

String key = "test";
String data = "test";
String algorithm = "HmacSHA1";
Charset charset = Charset.forName("utf-8");
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), algorithm);
Mac mac = Mac.getInstance(algorithm);
mac.init(signingKey);
return new String(Base64.encodeBase64(mac.doFinal(data.getBytes(charset))), charset);

C#:

string key = "ed2ee2e0-65c1-11de-8a39-0800200c9a66";
string data = "test";
byte[] aKey = Encoding.UTF8.GetBytes(key);
byte[] aData = Encoding.UTF8.GetBytes(data);
HMACSHA1 oEncode = new HMACSHA1(aKey);
byte[] aBytes = oEncode.ComputeHash(aData);
return Convert.ToBase64String(aBytes);

最佳答案

只需使用:

byte[] bytes = Encoding.UTF8.GetBytes("SomeString");

但有一些注意事项:

  1. .NET 中不存在“UTF-8”字符串:所有字符串都是统一码 (UCS-2)。
  2. 没有大端/小端字节顺序在 UTF-8 中,字节顺序由格式定义。查看 RFC-2279了解详情。

为什么要关心字节是否有符号?

关于c# - 字符串到 byte[] - c# 的行为类似于 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com