c# 文本到 int64 表示
c# text to int64 representation
我正在尝试将 string
"Eureka"
转换为其 UTF-8 Int64
表示形式。
我正在尝试以下代码:
string message = "Eureka"; // if I use "Eureka[=10=][=10=]" it works...
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(message);
// this fails because I have 6 bytes, not 8 (as required for Int64)
Int64 m = BitConverter.ToInt64(bytes, 0);
byte[] decodeBites = BitConverter.GetBytes(m);
string decodeMessage = System.Text.Encoding.UTF8.GetString(decodeBites);
if (!decodeMessage.Equals(message)) {
Console.WriteLine("Message mis-match!!!");
}
现在,因为我的字符串太短,字节数不正确,所以失败了。如果我添加 2 个字符,它可以工作,但是 decodeMessage
中没有所需的字符串...很确定我需要一些转换技巧来在转换后删除尾随的“0”字节,但是 none 我的尝试成功了。任何帮助将不胜感激!!
更新
目标真的是 "Euraka" 的整数表示,而不是 "Eureka[=27=][=27=]" 然后 trim 最后......目标是对获得的 [=13 使用 RSA 方法=],所以在另一端,人们不会知道他们必须 trim 任何...!
让我们用 pad 数组 0
(确保数组包含 8
字节)和 trim 来自 [=14=]
的字符串:
string message = "Eureka"; // if I use "Eureka[=10=][=10=]" it works...
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(message);
byte[] pad = new byte[bytes.Length < sizeof(Int64) ? sizeof(Int64) - bytes.Length : 0];
// Concat(new byte[...]) - ensure m contains 8 bytes
Int64 m = BitConverter.ToInt64(
bytes.Concat(pad).ToArray(),
0);
byte[] decodeBites = BitConverter.GetBytes(m);
// Since we have 8 bytes always, we have to get rid of tail '[=10=]'
string decodeMessage = System.Text.Encoding.UTF8.GetString(decodeBites).TrimEnd('[=10=]');
if (!decodeMessage.Equals(message)) {
Console.WriteLine("Message mis-match!!!");
}
编辑: 因为 Int64
有 8 而 "Eureka"
编码在 6仅 ,您必须 摆脱 2 零字节。如果你不想要 Trim
你可以 Skip
他们例如
byte[] decodeBites = BitConverter
.GetBytes(m)
.TakeWhile(b => b != 0)
.ToArray();
string decodeMessage = System.Text.Encoding.UTF8.GetString(decodeBites);
我正在尝试将 string
"Eureka"
转换为其 UTF-8 Int64
表示形式。
我正在尝试以下代码:
string message = "Eureka"; // if I use "Eureka[=10=][=10=]" it works...
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(message);
// this fails because I have 6 bytes, not 8 (as required for Int64)
Int64 m = BitConverter.ToInt64(bytes, 0);
byte[] decodeBites = BitConverter.GetBytes(m);
string decodeMessage = System.Text.Encoding.UTF8.GetString(decodeBites);
if (!decodeMessage.Equals(message)) {
Console.WriteLine("Message mis-match!!!");
}
现在,因为我的字符串太短,字节数不正确,所以失败了。如果我添加 2 个字符,它可以工作,但是 decodeMessage
中没有所需的字符串...很确定我需要一些转换技巧来在转换后删除尾随的“0”字节,但是 none 我的尝试成功了。任何帮助将不胜感激!!
更新 目标真的是 "Euraka" 的整数表示,而不是 "Eureka[=27=][=27=]" 然后 trim 最后......目标是对获得的 [=13 使用 RSA 方法=],所以在另一端,人们不会知道他们必须 trim 任何...!
让我们用 pad 数组 0
(确保数组包含 8
字节)和 trim 来自 [=14=]
的字符串:
string message = "Eureka"; // if I use "Eureka[=10=][=10=]" it works...
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(message);
byte[] pad = new byte[bytes.Length < sizeof(Int64) ? sizeof(Int64) - bytes.Length : 0];
// Concat(new byte[...]) - ensure m contains 8 bytes
Int64 m = BitConverter.ToInt64(
bytes.Concat(pad).ToArray(),
0);
byte[] decodeBites = BitConverter.GetBytes(m);
// Since we have 8 bytes always, we have to get rid of tail '[=10=]'
string decodeMessage = System.Text.Encoding.UTF8.GetString(decodeBites).TrimEnd('[=10=]');
if (!decodeMessage.Equals(message)) {
Console.WriteLine("Message mis-match!!!");
}
编辑: 因为 Int64
有 8 而 "Eureka"
编码在 6仅 ,您必须 摆脱 2 零字节。如果你不想要 Trim
你可以 Skip
他们例如
byte[] decodeBites = BitConverter
.GetBytes(m)
.TakeWhile(b => b != 0)
.ToArray();
string decodeMessage = System.Text.Encoding.UTF8.GetString(decodeBites);