【发布时间】:2020-11-25 01:00:50
【问题描述】:
我红色:How many bytes will a string take up? 和 How to know the size of the string in bytes? 以及其他一些,但我无法计算出使用 BinaryWriter 而不是 MemoryMappedViewStream 而不是 MemoryMappedFile 的字符串将进入内存的确切字节数。
有时取的长度是字符串 lenght + 1,有时是字符串 lenght + 2 ???
我都试过了:
- System.Text.ASCIIEncoding.Default.GetByteCount(str)
- System.Text.ASCIIEncoding.Unicode.GetByteCount(str)
但它们都不起作用。我尝试了字符串长度加上一个固定的数量,但它也不起作用。
如果我检查之前和之后的 BinaryWriter.BaseStream.Position 之间的差异,那么我无法找到一种方法来确定为字符串写入的确切字节数(之后的位置 - 之前的位置)。听起来好像有对齐或其他我无法弄清楚的东西?
如何每次写入合适的字节数?
更新
我现在使用Encoding.UTF8.GetByteCount(str) + 1;,它在大多数情况下给我的尺寸几乎是正确的,但并非总是如此。
【问题讨论】:
-
拥有长度后打算如何处理?
-
好的,如果有的话,你认为这些数字中的哪一个是正确的?
-
2 个进程通信(一个应用程序和一个记录器应用程序)。主要是单向的。我想在添加附加消息之前验证共享内存是否未满。如果是这样,如果读取器(日志)已经读取了我要写入的内存,我将翻转(从头开始)。但我需要验证我是否有足够的空间来编写消息。我可以通过 char 使用 2 个字节来近似,但为什么不干净地做这件事并获得实际数量?
标签: c# string memory size binarywriter