我遇到了需要您帮助的数据转换问题。
我的项目是InterOp介于C和 C# 之间的,来自C的所有数据都是char *类型,数据本身可以是二进制或可显示的字符,即每个字节都在 0x00 到 0xFF 范围内。
我正在使用 Datamarshal::PtrToStringAnsi将其转换char*为String^in CLI code,但我发现一些字节值发生了变化。例如 C382 转换为 C32C。我想这可能是因为ANSI只能转换7-bit char,但82超出范围?谁能解释为什么以及最好的方法是什么?
基本上我想要做的是,我不需要任何编码转换,我只想将任何 char * 面值转换为字符串,例如,如果我也char *p = "ABC"想要String ^s="ABC",如果*p="C382"(表示二进制值)我也想要^s="C382"。
在我的 .NET 代码中,两个子类将采用表示二进制数据或真实字符串的输入字符串,如果它是二进制的,它将转换"C382" to byte[]=0xC3 0x82;
读回数据时,C382 会以二进制数据的形式从数据库中取出,最终需要转换为char* "C382".
有没有人有类似的经验如何在两个方向上做这些?我尝试了很多方法,它们似乎都是编码方式。