<blockquote>
<p>Notpad++ shows in the bottom left UTF-8 when I open ASCII .raw files and UCS-2 Little Endian when open binary decompressed .raw files."</p>
</blockquote>
<p>这很正常,UTF-8是一种<strong>文本</strong>编码,它只是将一个字节序列与某个字符相关联。原始二进制文件没有固定的结构或编码,因为它们包含二进制数据:例如,想想字符串<code>"3.1415926535"</code>(在UTF-8中是12个字节)和该值的原始浮点二进制表示(4个字节)之间的区别。如果将浮点的“原始”4字节解释为文本,则会得到一些垃圾文本输出或unicode解码错误。对于原始文件,特定的数据格式和每个字节的含义由生成它们的软件指定。在</p>
<p>通常,您应该查找LTSpice原始文件规范,了解数据是如何排列的,并为自己编写一个解析器。但是,由于这是python,<a href="https://pypi.org/project/ltspice/" rel="nofollow noreferrer">someone already did that for you and made a package you can install via ^{<cd2>}</a>,请查找该包及其示例,它应该很容易使用。在</p>
<hr/>
<h3>更新</h3>
<p>在<a href="https://ez.analog.com/design-tools-and-calculators/f/q-a/107457/ltspice-raw-data-format" rel="nofollow noreferrer">this link</a>上,他们声明原始二进制格式没有正式公开,并且随时可能改变(尽管在过去的15年里没有)。在</p>
<p>格式本身是一个UTF-16头,后面跟着原始二进制数据。
当你说:</p>
<blockquote>
<p>This is what I have currently in .raw file from LTSpice (After text "Binary:"): [...]</p>
</blockquote>
<p>这是原始数据(在UTF-16解码,正如您所见,这在文本中是无稽之谈)。原始数据是变量值的压缩列表,按头文件中定义的顺序排列,重复数据中的时间点。时间是用<strong>双精度</strong>编码的(即8字节),其他任何东西——除非你强迫它也加倍——都是在<strong>float</strong>中(4字节)。
那么,你应该做的是:</p>
<p>1)解析变量列表并计算一条记录的长度(例如,8+4*num_of_variables)</p>
<p>2)从“二进制”字符串中获取字节数据,直到文件结束,
然后按照第一步的长度把它分成块</p>
<p>3)相应地解释记录中的字节</p>