Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用ASCII编译的C#字符串_C# - Fatal编程技术网

用ASCII编译的C#字符串

用ASCII编译的C#字符串,c#,C#,据我所见,C#中的每个字符串都被编译成unicode aUnableToParseL: // DATA XREF: test.main__Main+38o unicode <Unable to parse local IPv4s.>,0 aUnableToParseL://数据外部参照:test.main\uu main+38o unicode,0 我想知道,有没有办法告诉编译器,把所有的字符串编译成ASCII格式?(每个字符1个字节

据我所见,C#中的每个字符串都被编译成unicode

aUnableToParseL:                        // DATA XREF: test.main__Main+38o
unicode <Unable to parse local IPv4s.>,0
aUnableToParseL://数据外部参照:test.main\uu main+38o
unicode,0

我想知道,有没有办法告诉编译器,把所有的字符串编译成ASCII格式?(每个字符1个字节)

您可以将字符串存储为字节数组,然后根据需要将其转换为
char
数组或
string
s

只需在
System.Text
命名空间中使用
ascienceonding
类即可。有关方法将是:

 char[] GetChars(byte[] bytes);
 string GetString(byte[] bytes);
当然,
char
string
都是UTF-16,因此您不会真正获得太多,因为您最终会付出您试图避免的内存“代价”;无论是在可执行文件大小还是在运行时内存中


总之,我不太清楚你为什么要这么做,特别是在一个托管环境中,这似乎毫无意义;如果您处于这种资源优化级别,那么您最好在完全不同的环境中工作。

如其他人所述,您可以将ASCII保存在文本文件中,甚至可以将其作为资源添加到项目中,以便将其包含在可执行文件中。您甚至可以更疯狂地压缩ASCII并将其添加为资源

这可以减少内存消耗,但也会增加CPU使用率,使执行速度稍慢。可能程序中几乎所有的方法都接受.NET UTF-16
System.String
,因此ASCII必须编码为使用CPU的
System.String

这是优化中通常(但并非总是)的权衡——更快、更大或更小、更慢

有很多方法可以避免这种编码。例如,使用接受ANSI字符串的winapi


如果您更改
控制台,我不确定是否有任何编码。OutputEncoding

要回答您的主要问题,答案似乎是否定的。您不能更改编译器存储字符串的方式。这是另一个类似问题的链接:你不能那样做。如果您一心想减少几千字节的可执行文件,那么就不要首先存储字符串,只需在需要时读取字符串的地方使用ASCII格式的文件即可。我真的不知道为什么这是必要的,但你没有任何其他选择;这不是一个可以修改的编译器选项。众所周知,@mexikanoZ,托管语言在内存和性能方面不是最佳选择。对于这种情况,C/C++是一个更合理的选择;您希望“最终保护数千字节”,并决定“将所有字符串编译成ASCII”来实现这一点。停止这极不可能有帮助。告诉我们“安全数千字节”的要求是从哪里来的,我们可能会提供帮助。根据您的数据,压缩Unicode比使用ASCII更可能节省字节,但我们不知道您的数据是什么。在.NET和C#中,所有字符串都使用UTF-16编码,但有一个例外: