我已经解析了Skype数据库main.db几天了,这是我还没想到的.当然,这个问题将特别针对Skype main.db结构.(免责声明)
似乎我需要的所有必要信息都在表格Conversations中Messages,Participants.
Message表包含已经说过的实际日志,收件人,时间戳和convo_id外键(尽管未强制执行)以连接到Conversation邮件所属的邮件.
Conversation存在以保存参与的聚合Message和联系人.
Participantstable适用于Conversations表和Contacts表之间的多对多连接器表.
是什么让我 Chats和Chatmembers桌子.Chatmembers作品以Chats什么Participants表工程Conversations表; 连接联系人和对话 - 或"聊天".
是什么在Chats类似Conversations,只是它没有任何骨料Message表.消息日志(表行)所属的Messages表与Chats表之间的映射是不可能的Messages.
Chats并Conversations共享一个外键,Conversations表有一个名为chat_dbidjoin的Chats表.但是Conversations表中的行有一个空chat_dbid字段,而不是所有的行Chats都有id对应chat_dbid于Chats表中字段的字段.
该Chats表仍在更新中,我认识到最近我根据时间戳和其中的成员进行的一些聊天或对话.
有谁知道究竟是什么 …
当我在C#中处理一些较旧的代码时,我遇到了一个令我烦恼的代码.
没有太多的麻烦,它是这样的:
private string foo(string _text)
{
/* some manipulation on _text */
return _text = Server.HtmlDecode(_text);
}
Run Code Online (Sandbox Code Playgroud)
这是让我烦恼的最后一句话; 我来自C背景,我可以理解代码实际上是试图返回一个已解码的_text变量.赋值运算符的值也是左操作数,所以我可以看到它.
然而,我仍然觉得它很令人厌烦.
它是C#中的纵向练习,我需要习惯吗?
对我来说,最后一行应该是
return Server.HtmlDecode(_text);
Run Code Online (Sandbox Code Playgroud)
而不是作业表达.是否有更深入的C#功能,我不知道?
我正在开发一个小项目,我无法访问任何C标准库.(从头开始构建一个ARM结构的微内核.甚至必须实现printf)
在这种情况下,我使用Duff的机器方法实现了strcmp.
以下是整个代码.
int
strcmp ( const char *str1, const char *str2 )
{
while ( *str1 || *str2 )
if ( *(str1++) != *(str2++) ) return *str1 - *str2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是有道理的; 有些时候它似乎适用于测试用例,直到最终系统发生故障.我追查到了这个strcmp.
起初我以为它首先递增str1然后比较str2 BEFORE str2递增.事实证明不是,但有人可以确认在某些情况下会发生这种情况吗?
然后我发现问题出现在*str1 - *str2中,所以将其更改为返回1.即,结果代码如下:
while ( *str1 || *str2 )
if ( *(str1++) != *(str2++) ) return 1;
return 0;
Run Code Online (Sandbox Code Playgroud)
虽然我想要的只是一个'等于'检查,所以改成'1'没有问题,但我仍然想知道为什么原始代码失败了.2.有人可以提出关于它如何失败的建议吗?我宁愿希望strcmp遵循标准的C接口,它返回一个非零值,告诉更多关于str1和str2的信息.
测试用例是:
code_t // a function pointer type
program_find ( char *program )
{
if (strcmp( program, "exit" ) == …Run Code Online (Sandbox Code Playgroud)