小编Chr*_*vic的帖子

解密XOR加密文件会过早中止

使用一个简单的函子调用 Encryptor

struct Encryptor {
    char m_bKey;
    Encryptor(char bKey) : m_bKey(bKey) {}
    char operator()(char bInput) {
        return bInput ^ m_bKey++;
    }
};
Run Code Online (Sandbox Code Playgroud)

我可以轻松地加密给定文件

std::ifstream input("in.plain.txt", std::ios::binary);
std::ofstream output("out.encrypted.txt", std::ios::binary);
std::transform(
    std::istreambuf_iterator<char>(input),
    std::istreambuf_iterator<char>(),
    std::ostreambuf_iterator<char>(output),
    Encryptor(0x2a));
Run Code Online (Sandbox Code Playgroud)

但试图通过调用来恢复它

std::ifstream input2("out.encrypted.txt", std::ios::binary);
std::ofstream output2("out.decrypted.txt", std::ios::binary);
std::transform(
    std::istreambuf_iterator<char>(input2),
    std::istreambuf_iterator<char>(),
    std::ostreambuf_iterator<char>(output2),
    Encryptor(0x2a));
Run Code Online (Sandbox Code Playgroud)

只做部分工作 以下是文件大小:

in.plain.txt:      7,700 bytes
out.encrypted.txt: 7,700 bytes
out.decrypted.txt: 4,096 bytes
Run Code Online (Sandbox Code Playgroud)

在这种情况下,似乎该方法仅适用于第一个2**12字节,可能只适用于它的倍数(它可能是我的文件系统的块大小?).为什么我有这种行为以及解决方法是什么?

c++ encryption stl file stream

5
推荐指数
1
解决办法
232
查看次数

Visual Studio 2012 IntelliSense与Visual Assist X和Doxygen

我曾经以简约的方式在我的头文件中写简单的注释

// Returns a new string in which all occurrences of a specified string in the
// current instance are replaced with another specified string.
// - strSubject: The string to perform the replacement on.
// - strOldValue: The string to be replaced.
// - strNewValue: The string to replace all occurrences of strOldValue.
static RUNTIME_API String::type Replace
    (_In_       String::type  strSubject,
     _In_ const String::type& strOldValue,
     _In_ const String::type& strNewValue);
Run Code Online (Sandbox Code Playgroud)

这样Visual Appist就会显示我的评论:

智能感知

目前我正在考虑使用Doxygen为项目创建文档,但是我正在努力寻找在工具提示中正确显示的文档样式,并且可以使用Doxygen进行解析.首先,我考虑在*.cpp文件中包含Doxygen样式注释,这样我只会显示标题注释.因此,在我的源文件中,我有一个评论

/*!
 * Returns a new string in which …
Run Code Online (Sandbox Code Playgroud)

c++ intellisense doxygen visual-assist visual-studio-2012

5
推荐指数
1
解决办法
2935
查看次数

如何在CIL中处理堆栈上的不同类型

尝试使用ildasm深入研究CIL代码,很明显CIL本身就是基于堆栈来支持像这样的表达式

IL_0001:    ldc.i4.s 13     ; 1f 0d
IL_0003:    stloc.0         ; 0a
IL_0004:    ldc.i4.s 31     ; 1f 1f
IL_0006:    stloc.1         ; 0b
IL_0007:    ldloc.0         ; 06
IL_0008:    ldloc.1         ; 07
IL_0009:    add             ; 58
Run Code Online (Sandbox Code Playgroud)

做同样float32而不是int32使用ldc.r4 <num>它在调用方面没有区别add因此让我想知道是否存在针对不同类型的不同堆栈或者如果只有一个堆栈保存特定元素在堆栈上具有的类型的元数据.是否有关于ECMA-335或其他地方的具体实施的信息?

.net clr stack types cil

5
推荐指数
2
解决办法
222
查看次数

使用PhpStorm/WinSCP和SFTP进行错误的文件编码

我的主机已禁用FTP,因此我被迫使用SFTP但是自从转移到SFTP后我遇到了一些与PhpStorm有关的奇怪问题.我的文件名有时会在其中包含德语变音符号,Lösungsblatt或者Übungsblatt通常它已正确上传,主机窗口正确显示文件.由于我被迫在远程主机上使用SFTP旧文件显示为此

在此输入图像描述

而新上传的文件在PhpStorm中正确显示.但是在WinSCP中,旧文件正确显示为Lösungsblatt-01.pdf等等,但似乎通过PhpStorm正确上传的文件因为显示为

在此输入图像描述

这基本上是反过来的.我确实感觉在上传过程中混合了UTF-8和UTF-16文件名,所以我很好奇如何设置IDE以便(1)正确显示远程树中的文件名(2)使用正确的编码正确上传文件(不是内容的编码,而是文件名本身的编码!)

encoding sftp utf-8 phpstorm

5
推荐指数
1
解决办法
708
查看次数

并行Visual Studio安装和文件关联

我已经和VS10合作多年了,昨天我和旧版本并排安装了VS12.现在我注意到一些文件关联不一致.项目由版本选择器打开,VS10的C++文件和VS12的FSX文件打开,更多的是这个混乱.一切都有点随机,我想将所有内容映射到VS12,同时仍然安装VS10,因为我使用XNA,你知道VS12还没有正式支持XNA.

搜索SO显示我只需要转到选项>常规>恢复文件关联,但它现在称为管理文件关联,控制面板正在打开,让我选择VS的每种可用格式我想要的:

控制面板文件关联

我可以选中复选框来选择所有可用的格式但是...我不喜欢这个想法,因为它可能会破坏某些东西.

有什么好的建议是否我的怀疑是错误的 - 但我应该怎样管理协会而不破坏任何东西?

visual-studio-2010 file-association visual-studio visual-studio-2012

4
推荐指数
1
解决办法
1424
查看次数

我应该在DirectX中使用std :: string或Windows数据类型吗?

我一直在研究基于DirectX的项目,我正在努力解决问题.虽然DirectX SDK中严重依赖Windows的数据类型,如LPSTR,LPCSTR......我已经用了我自己的类std::string这是很容易的工作,但它看起来很奇怪混合的处理字符串两种方式.虽然这是一个模糊的问题,但你有什么建议 - 我应该使用strings或Windows指针来处理不同的字符串类型以保持一致性吗?

c++ windows string directx winapi

4
推荐指数
1
解决办法
702
查看次数

Mathematica-like(LaTeX)排版用于自己的CAS应用程序

当我使用Mathematica时,我想到了一个小而免费的CAS,它只暴露了一小部分必要的函数和包,我希望以适当的方式向用户呈现结果,如Mathematica (忽略后台的Facebook徽标:D):

Mathematica的输出

我的第一个想法是在后台和pdflatex源代码中创建LaTeX代码,然后在视图中包含PDF ...但是这似乎有点太过分了!我想用C++或C#编写这个CAS,我想知道是否有任何推荐的解决方案来输出这样的好公式.

我的第一个想法是"实时公式编辑视图",但是输入框可以输入命令和公式,上部视图只是不可编辑的输出.

math latex wolfram-mathematica formula computer-algebra-systems

3
推荐指数
1
解决办法
1244
查看次数

INOTifyPropertyChanged的OnPropertyChanged参数

我进入MVVM并偶然发现调用OnPropertyChanged此MWE中显​​示的函数的两个版本:

public class SampleModel : INotifyPropertyChanged
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set
        {
            if (value == _name) return;
            _name = value;
            // Version 1
            OnPropertyChanged();
            // Version 2
            OnPropertyChanged(nameof(Name));
        }
    }

    #region INotifyPropertyChanged members
    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    #endregion
}
Run Code Online (Sandbox Code Playgroud)

为什么我会选择版本1而不是版本2,反之亦然?

c# wpf mvvm inotifypropertychanged

3
推荐指数
2
解决办法
479
查看次数

是否可以使用 TypeOrm 从对象设置字段值?

是否可以使用 TypeOrm 保留类型安全性来设置对象的字段值?

我在文档中找到的所有示例都建议您一一设置属性

const newUser = new User();
newUser.firstName = 'John'
newUser.lastName = 'Doe'
newUser.role = 'manager'
newUser.phone = '1234567890'
newUser.login = 'john.doe'
newUser.password = '12345'
newUser.save();
Run Code Online (Sandbox Code Playgroud)

如果我可以这样设置字段,那就更好了:

const newUser = new User();
newUser.setFields({
        firstName: 'John',
        lastName: 'Doe',
        role: 'manager',
        phone: '1234567890',
        login: 'john.doe',
        password: '12345'
    }
);
newUser.save();
Run Code Online (Sandbox Code Playgroud)

它将允许使用快捷方式

const newUser = new User();
newUser.setFields({
        firstName,
        lastName,
        role,
        phone,
        login: 'john.doe',
        password: '12345'
    }
);
newUser.save();
Run Code Online (Sandbox Code Playgroud)

并使用组合

const newUser = new User();
newUser.setFields({
        firstName,
        lastName,
        role,
        phone,
        ...credentials …
Run Code Online (Sandbox Code Playgroud)

orm typescript typeorm

3
推荐指数
1
解决办法
4145
查看次数

来自类实现接口的析构函数在引用为接口时未调用

我有一个基本的界面(在Visual Studio 2013中使用Microsofts C++语法),它公开了这样的简单函数:

__interface IDisposable {
    void Dispose();
};
__interface IBase : public IDisposable {
    void Foo();
    void Bar();
};
Run Code Online (Sandbox Code Playgroud)

有一种特定类型的类必须继承这些方法,因此这些类具有以下结构:

class Derived : public IBase {
public:
    Derived();
    ~Derived();
    void Dispose();
    void Foo();
    void Bar();
}
Run Code Online (Sandbox Code Playgroud)

这些类也有一些变量,我想使用智能指针,但这些指针确实产生泄漏,因为~Derived()在下面的场景中没有调用析构函数:

  • 我有一个Stack<IBase*>用来处理一堆这些对象(例如Derived,Derived2等).
  • 一旦pCurrent应该从堆栈中删除最顶层的元素()与相应的数据(m_Data)我调用处理资源的方法:((IDisposable*)pCurrent->m_Data)->Dispose();
  • 这个调用之后是一个delete pCurrent->m_Data显然尝试调用~IBase()哪个不明显存在,因为它是一个接口.因此,所提到的~Derived()也不会被调用,并且任何智能指针Derived也不会被删除,这会导致严重的内存泄漏.

令人惊讶的是手动删除工作:

auto p = new Derived();
delete p; // ~Derived() is properly called as we are …
Run Code Online (Sandbox Code Playgroud)

c++ virtual destructor interface c++11

2
推荐指数
1
解决办法
855
查看次数