Created
August 27, 2020 14:04
-
-
Save mgravell/c01f7d64d78e0dec40d0f08405cd9364 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using ProtoBuf; | |
using System; | |
using System.IO; | |
static class Funchelper | |
{ | |
static void Main() | |
{ | |
var obj = new NotAForm(); | |
obj.DoTheThing(); | |
} | |
public static byte[] HexStrTobyte(string hex) | |
{ // I'm guessing some code here... | |
hex = hex.Replace(" ", ""); | |
var blob = new byte[hex.Length / 2]; | |
for (int i = 0; i < blob.Length; i++) | |
{ | |
blob[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16); | |
} | |
return blob; | |
} | |
public static string byteToHexStr(byte[] bytes) | |
{ | |
string returnStr = ""; | |
if (bytes != null) | |
{ | |
for (int i = 0; i < bytes.Length; i++) | |
{ | |
returnStr += bytes[i].ToString("X2") + " ";//ToString("X2") 为C#中的字符串格式控制符 | |
} | |
} | |
return returnStr; | |
} | |
} | |
class NotAForm | |
{ | |
public void DoTheThing() => button1_Click(this, EventArgs.Empty); | |
private void button1_Click(object sender, EventArgs e) | |
{ | |
string data = "ClgKCjE2NDMzMTAwMDISDkxvcmRjVmVqZ3dCYTRtGgAgATgBQABIAFiorbuY6KxeYNqdE2iF+AVw0O2S3aEueJygqMLngmGAAbLXy48GkAEAmAEAoAEAqAEDEAgYqIaZxbwuKiw3bUpoYmlUL29nM0trSkZ0T2duK3Rkcys2TG9OcFdoZzdGZUlnQmF4ZkgwPTINaHR0cHM6Ly8uY29tLzix18uPBkIGT25saW5lSAA="; | |
byte[] data2 = System.Convert.FromBase64String(data); | |
data = Funchelper.byteToHexStr(data2); | |
Console.WriteLine(ProtobufDecode(data)); | |
} | |
static string WriteTree(ProtoReader reader) | |
{ | |
string JSONstring = null; | |
JSONstring = "["; | |
while (reader.ReadFieldHeader() > 0) | |
{ | |
Console.WriteLine(reader.FieldNumber); | |
Console.WriteLine(reader.WireType); | |
switch (reader.WireType) | |
{ | |
case WireType.String: | |
string dataStr = null; | |
byte[] dataByte = null; | |
dataByte = ProtoReader.AppendBytes(null, reader); | |
if (dataByte[0].ToString() == "10") | |
{ | |
dataStr = Funchelper.byteToHexStr(dataByte); | |
dataStr = ProtobufDecode(dataStr); | |
} | |
else | |
{ | |
dataStr = Convert.ToString(dataByte); | |
} | |
JSONstring += "{"; | |
JSONstring += "\"" + "FieldNumber" + "\":\"" + reader.FieldNumber + "\","; | |
JSONstring += "\"" + "WireType" + "\":\"" + reader.WireType + "\","; | |
JSONstring += "\"" + "Value" + "\":\"" + dataStr + "\","; | |
JSONstring += "},"; | |
break; | |
case WireType.StartGroup: | |
// one of 2 sub-object formats | |
var tok = ProtoReader.StartSubItem(reader); | |
WriteTree(reader); | |
ProtoReader.EndSubItem(tok, reader); | |
break; | |
default: | |
reader.SkipField(); | |
break; | |
} | |
} | |
char[] specialChars = new char[] { ',' }; | |
JSONstring = JSONstring.TrimEnd(specialChars); | |
JSONstring += "]"; | |
return JSONstring; | |
} | |
static string ProtobufDecode(string checkHex) | |
{ | |
byte[] data = Funchelper.HexStrTobyte(checkHex); | |
using (var ms = new MemoryStream(data)) | |
{ | |
try | |
{ | |
var test = ProtoReader.Create(ms, null, null); | |
string datatest = WriteTree(test); | |
return datatest; | |
} | |
catch { } | |
} | |
return System.Text.Encoding.ASCII.GetString(Funchelper.HexStrTobyte(checkHex)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment