【发布时间】:2017-01-18 13:36:31
【问题描述】:
据我所知,C# 中的每一个字符串都被编译成 unicode。
aUnableToParseL: // DATA XREF: test.main__Main+38o
unicode <Unable to parse local IPv4s.>,0
我想知道,有什么方法可以告诉编译器,将所有字符串编译成 ASCII 格式? (每个字符 1 个字节)
【问题讨论】:
-
要回答您的主要问题,答案似乎是否定的。您无法更改编译器存储字符串的方式。这是另一个类似问题的链接:stackoverflow.com/questions/6550254/…
-
你不能那样做。如果您一心想减少几千字节您的可执行文件,那么不要存储开头的字符串,只需使用格式为 ASCII 的文件,您可以根据需要在其中读取字符串。我真的不确定为什么有必要这样做,但您别无选择;它不是您可以修改的编译器选项。
-
好吧,@mexikanoZ,就内存野蛮和性能而言,托管语言并不是最佳选择,这是众所周知的。对于这种场景,C/C++ 是更合理的选择。
-
这听起来像XY problem;你想要“最终保护几千个字节”并决定“将所有字符串编译成 ASCII”来做到这一点。停止;这极不可能有帮助。告诉我们这个“安全的几千字节”要求来自哪里,我们也许可以提供帮助。根据您的数据,压缩 Unicode 比使用 ASCII 更有可能节省字节,但我们不知道您的数据是什么。
-
在 .NET 和 C# 中,所有字符串都使用 UTF-16 编码,但有一个例外:codeblog.jonskeet.uk/2014/11/07/when-is-a-string-not-a-string
标签: c#