C#文本到int64表示形式

时间:2018-11-21 13:36:19

标签: c# byte bytestring int64

我正在尝试将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方法,因此另一方面,人们不会知道他们必须修剪任何东西……!

1 个答案:

答案 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