我有几个十六进制值,我尝试写入文件.似乎Lua不支持开箱即用,因为它们都被视为字符串而不是值.我想我必须将更长的十六进制值分解,例如将AABBCC分解为AA,BB,CC并连续使用所有十进制值的string.char()来完成工作.
是否有内置函数允许我直接编写这些值而不先进行转换?我使用了诸如"0xAA"和"\ xAA"之类的转义字符,但是那些没有用完.
编辑:让我举个例子.我在十六进制编辑器中查看测试文件:
00000000 00 00 00 00 00 00 ......
Run Code Online (Sandbox Code Playgroud)
我想用以下方式用字母"AABBCC"写它:
00000000 AA BB CC 00 00 00 ......
Run Code Online (Sandbox Code Playgroud)
我通过转义字符获得的是:
00000000 41 41 42 42 43 43 AABBCC
Run Code Online (Sandbox Code Playgroud) 是否可以使用Windows 7 API函数调用转储进程的占用内存,而不必安装Windbg等外部工具?Taskmanager支持简单的一键式内存转储,让我相信它可能会使用API来解决这个问题.
我应该补充一点,我正在谈论正在运行的应用程序的内存转储.不是那些刚崩溃的人.
我尝试更新文件的某些部分而不删除或覆盖其他所有部分,但Lua的读/写模式似乎只支持附加数据,或删除现有数据并编写新数据.这是一个例子:
testfile.pak:"外面很冷" - >"外面温暖"
现在,我正在处理相当大的文件,而不是文本文件,所以将它们读入内存并只使用字符串操作函数在这里没有选择.此外,我已经将文件作为程序的一部分进行处理,因此我不想通过重新读取它们到必要的点来添加开销,插入数据并编写其余部分.这将需要两倍的HDD空间和两倍的时间.我也无法在第一个处理周期中写入必要的数据.所以我想知道是否可以告诉Lua写入文件中的某个偏移量而不必创建临时文件或重复文件,有点像十六进制编辑器能够更改文件的特定部分而无需保存文件的全新副本.还有其他 - 可能没有记录 - 为除了"w","w +","a"和"a +"之外的io.open编写选项吗?
我在网上找到了Delphi 7字符串解码器功能("Decrypt")的问题.它需要一个字符串和1到120之间的四个数值来解码它.将该函数放在可执行文件中并运行它可以很好地工作.但是,我想在DLL中运行它.我正在使用额外的函数从调用任务接收必要的值,并从那里调用解密函数.出于某种原因,我无法将手指放在上面,每次dll调用解密函数时,主机应用程序都会崩溃.在过去的几个小时里,我一直在尝试一切可以让它发挥作用,但没有成功.我是Delphi和Pascal的新手,所以我可能只是忽略了一些明显的东西.无论哪种方式,我都输了.任何帮助将不胜感激.
编辑:这是崩溃时弹出的Windows错误:
Fault Module Name: StackHash_0a9e
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Code: c0000005
Exception Offset: 00000000
OS Version: 6.1.7600.2.0.0.256.1
Locale ID: 1031
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
Run Code Online (Sandbox Code Playgroud)
这是我使用的代码:
library decrypt_test_dll;
uses
SysUtils,
Classes,
Dialogs;
{$R *.res}
function callfunction(externalstring, value1, value2, value3, value4: PAnsiChar):integer; cdecl;
var
convkey1, convkey2, convkey3, convkey4 : string;
convstring, decodedstring : string;
Decrypt : function(Text : string; Key1, Key2, Key3, Key4 …Run Code Online (Sandbox Code Playgroud) 有没有办法在Win 7中获得所有服务的完整列表,而无需安装Net Framework 4等API?我希望尽可能本地获取列表.
我写了一个小函数来将MB转换为Bytes,但是,int64中似乎存在一个错误.根据文档,int64的范围从-9223372036854775808到9223372036854775807,但我的结果不同......很多:
Const FreeSpace = 67100;
var FreeSpaceConverted :int64;
.
.
.
FreeSpaceConverted := FreeSpace shl 20;
Run Code Online (Sandbox Code Playgroud)
对FreeSpace使用值67100会导致值为1639972864而不是70359449600.很明显,转换用完了空间并且被包围了.int64的实际大小似乎是70359449600 - 1639972864 = 68719476736 = 2 ^ 36,而它应该是2 ^ 63-1.36的指数看起来很奇怪.这可能是编译器本身的数字扭曲吗?
此外,使用以下替代方法会出现错误"转换或算术运算中的溢出",即使它不应该:
FreeSpaceConverted := FreeSpace * 1024 * 1024;
Run Code Online (Sandbox Code Playgroud)
另一方面,以下替代方案确实有效:
FreeSpaceConverted := FreeSpace * 1024;
FreeSpaceConverted := FreeSpaceConverted * 1024;
Run Code Online (Sandbox Code Playgroud)
这是正常的行为,如果是这样,这是什么原因?
我正在尝试将数据库的数据类别的数据值加载到表中以供进一步处理.每个数据类别都应该有自己的表.遗憾的是,数据类别的数量不一致,因DB而异,因此我考虑根据当前数据类别的数量自动创建表:
--categories is a table containing the names of all data categories
for a = 1, #categories, 1 do
temptable..a = {};
end
Run Code Online (Sandbox Code Playgroud)
这当然不起作用,因为Lua尝试将表分配给变量而不是其值.这种方式也不可能进行变量连接.有没有办法让Lua自动创建表格?