我正在尝试将string
"Eureka"
转换为其UTF-8 Int64
表示形式。
我正在尝试以下代码:
string message = "Eureka"; // if I use "Eureka\0\0" 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”字节,但是没有一个我的尝试奏效。任何帮助将不胜感激!
更新
目标实际上是使用“ Euraka”而不是“ Eureka \ 0 \ 0”的整数表示形式,然后在末尾进行修整。...目标是在获得的Int64
上使用RSA方法,因此另一方面,人们不会知道他们必须修剪任何东西……!
答案 0 :(得分:3)
让我们用0
(确保该数组包含8
个字节)和 trim 来自{{1}的字符串 pad }:
\0
编辑:由于string message = "Eureka"; // if I use "Eureka\0\0" 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 '\0'
string decodeMessage = System.Text.Encoding.UTF8.GetString(decodeBites).TrimEnd('\0');
if (!decodeMessage.Equals(message)) {
Console.WriteLine("Message mis-match!!!");
}
具有 8 ,并且Int64
仅以 6 进行编码,因此,必须清除 2 个零字节。如果您不希望"Eureka"
,则可以Trim
,例如
Skip