我遇到需要您帮助的数据转换问题。将C char *转换为.Net字符串,然后转换为字节[]
我的项目是一个InterOp
从之间Ç和C#中,所有的数据Ç是char *
类型,数据本身可能是二进制或字符显示,即每个字节在0x00到0xFF范围内。
我正在使用数据marshal::PtrToStringAnsi
将char*
转换为String^
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"
。
有没有人有类似的经验如何做到这两个方向?我尝试了很多方法,它们似乎都是编码方式。
感谢David.I试图Marshal.Copy我的职务之前,也有我的两个问题。 1)我想首先将IntPtr转换为字符串,因为.net超类将字符串作为输入类型,一个子类用于处理二进制数据,另一个用于处理文本字符串。 2)如果我记得正确,它似乎复制编码转换背后的scense,即IntPtr到字符串(字符串总是双字节)。 – user1821130
不要使用'string'。 'Marshal.Copy'不编码。我在这里使用的重载等同于'memcpy'。只要你使用字符串,你就会迫使编码发挥作用。你明确声明你不想用编码转换数据。所以不要使用字符串,并使用'byte []'。 –
再次感谢大卫。我会试一试。 – user1821130