- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Delphi Prism 并使用 BinaryWriter 创建和写入二进制文件,如下所示。
method TUnit.Write(bw:BinaryWriter);
var
i:Integer;
begin
bw.write(ord(uType));
bw.Write(ord(State));
bw.Write(Address);
bw.Write(SubAddress);
for i:=1 to 20 do
bw.Write(fDefs[i]);
end;
我向你提出的问题是这样的。 write 方法是否逐行写入或逐个字节写入或逐个字符写入而不换行或回车?
我问这个问题的原因是因为我在编写和读取没有特定数量的字符(例如字符数组)的字符串时感到困惑。
例如:
method WritetoFile;
var
x:integer;
thestr:string;
begin
BinaryWriter thefile := new BinaryWriter(File.Create("test.dat"));
thefile.write(thestr);
thefile.write(x);
thefile.Close;
end;
method ReadFromFile;
var
x:integer;
thestr:string;
begin
BinaryReader thefile := new BinaryReader(File.OpenRead("test.dat"));
thestr:=thefile.ReadString;
x:=thefile.ReadInt32;
thefile.Close;
end;
这就是我编写程序的方式,它似乎工作正常,但正如我所说,我很困惑。
当它是字符串数据类型时,它如何知道要读取或写入多少字节或字符长度而不给它指定要读取的长度?
最佳答案
Does BinaryWriter "Write method" work the same as Writeln method from Delphi?
不,没有。
How does it know how many bytes or characters length to read or write when it is a string data type without giving it a specific numbers of length to read?
在很多方面,您实际上并不需要了解 BinaryWriter
和 BinaryReader
是如何做到这一点的。您正在正确使用它。您只需将每个 Write()
调用与相应类型的匹配 ReadXXX()
调用配对即可。
documentation确实描述了底层的二进制文件格式。您不需要写入或读取字符串的长度,因为二进制 I/O 类完全代表您执行此操作。
A length-prefixed string represents the string length by prefixing to the string a single byte or word that contains the length of that string. This method first writes the length of the string as a UTF-7 encoded unsigned integer, and then writes that many characters to the stream by using the BinaryWriter instance's current encoding.
因此,您可以安全地编写包含换行符的字符串,并且在读取该字符串时,这些换行符将被保留。
关于.net - 德尔福棱镜 : Does BinaryWriter "Write method" work the same as Writeln method from Delphi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7362111/
我是 D 的新手,我只是在尝试。我正在使用的一本书给了我一个通用二进制搜索方法的例子。然后我想制作我自己的主要方法来打印结果只是为了好玩。我来自 Java,其中字符串连接只是使用 + 运算符完成的。
自恐龙时代以来,Turbo Pascal 和现在的 Delphi 都有 Write() 和 WriteLn() 过程,可以悄悄地做一些巧妙的事情。 参数数量可变; 每个变量可以是各种类型;您可以提供整
使用 writef() ,我可以控制一个浮点数的输出精度,例如: writef( "%20.15dr\n", 1.0 / 3.0 ); // 0.333333333333333 但如果我使用
D 版的 Hello World 如下所示: import std.stdio; void main(string[] args) { writeln("Hello World, Reload
我有以下代码(RAD Studio XE2,Windows 7 x64): program letters; {$APPTYPE CONSOLE} {$DEFINE BOO} const ENGL
我正在尝试为一周中的几天创建自定义数据类型,但我无法让它写入。编译器错误如下: [Error] hours.dpr(28): Illegal type in Write/Writeln stateme
我有以下代码(RAD Studio XE2,Windows 7 x64): program letters; {$APPTYPE CONSOLE} {$DEFINE BOO} const ENGL
我在 Ubuntu 13.04 64 位上使用 DMD64 D 编译器 v2.063.2。 我写了一个类如下: class FixedList(T){ // list private
当我想用这种语法编写 html 文档时,我在控制台中收到错误消息: doc.writeln (" $e.html($(e).html().split(text).join('' + text + '
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
// 在上面的代码中,如果引用 The writeln() method is identical to the write() method, with the addition of
用下面一行代码: document.writeln("blahblahblah") 我希望内容单独占一行,但内容被插入,但没有换行。只有一个空间。 这是预期的吗? 最佳答案 新行将仅显示在代码输出标签
考虑这个程序: {$APPTYPE CONSOLE} begin Writeln('АБВГДЕЖЅZЗИІКЛМНОПҀРСТȢѸФХѾЦЧШЩЪЫЬѢѤЮѦѪѨѬѠѺѮѰѲѴ'); end.
我只是在写一些简单的代码,我注意到使用 document.writeln 不会写入新行,请允许我演示... // this is my JSON object var myObject = {
如何使用 writeln 在 Pascal 中打印撇号符号功能? 例子: writeln('My brother's book'); 无法工作,因为 s book没有“写”函数,所以编译器返回一个错误
晚安,我在 Embarcadero 10.2 上遇到 writeln 问题,我正在尝试将 sin() 函数编写为泰勒展开式无限系列。 一切都运行良好,但输出在科学表达式中,如:3.6044848692
对于较新的 Delphi 版本,支持 OSX 和 Android,是否有一种独立于平台的方法来检测 Writeln至 Output可以安全使用吗? 输出文档包含一条注释 Most processes
我在 Firefox 版本 27.0.1 上遇到此问题 当我使用 document.writeln('whatever'); 我无法使用简单的 setTimeout 函数,甚至无法使用警报。 我可以在
这是一个演示我的问题的小工具:http://plnkr.co/edit/322WB4jyCJberABbb0P0 我正在针对不同的问题进行一些测试,并且遇到了一些意外的行为。 var A = func
问候, 下面的代码适用于alert,但不适用于document.writeln。是因为onload事件吗?如果是这样,浏览器在完成加载后是否应该能够添加更多元素? - 尝试了解它是如何工作的(同时我正
我是一名优秀的程序员,十分优秀!