我遇到了需要您帮助的数据转换问题。
我的项目是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"
.
有没有人有类似的经验如何在两个方向上做这些?我尝试了很多方法,它们似乎都是编码方式。