小编Sec*_*ret的帖子

三元运算符何时比简单的if-else块更差?

我想知道:"三元运算符什么时候比使用'if-else'块更差?"

我想,它可能是调试时间(例如三元运算符不适合调试)

这样的美容有用吗?也许在某些情况下,简单的if-else块更适合使用?

谢谢

if-statement block operators ternary-operator

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

纯C/C++中的二进制序列化

我想自己实现二进制序列化,而不使用Boost或任何其他第三方库.

在C++中,实现它的最简单方法是使用ofstream然后通过网络发送二进制文件.但是有没有其他流类可以用作临时缓冲区以避免将文件写入磁盘?

另外,我怎样才能在纯C中实现这一目标?

c c++ binary implementation serialization

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

C#Linq比PHP慢?解决谜语#236A

我正在训练在一个网站上解决奥运IT谜语.

我提供了两个解决方案:

 - C# 
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/exF1HJ

 - PHP 
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/WbaPHY

当网上判断显示,PHP版本更快!!! 为什么?

C#:109毫秒3000 Kb

PHP:45毫秒0 Kb

怎么会这样?

php c# linq

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

隐式使用C++模板

我已经定义了这样的功能:

template<typename T>
void SwapMe(T *first, T *second)
{
    T tmp = *first;
    *first = *second;
    *second = tmp;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

SwapMe(&data[i], &data[j]);
Run Code Online (Sandbox Code Playgroud)

如你所见,我没有明确使用,SwapMe<T>(...);但确实有效!
为什么C++标准允许避免显式指定参数的类型?

c++ templates arguments explicit function

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

Dumpbin显示奇怪的方法名称(在MS Visual C++中生成导出功能)

我在VS中创建了新的Win32项目,并为此目的选择了动态库(*.dll).

我在主文件中定义了一些导出函数:

__declspec(dllexport)
int TestCall(void)
{
    int value = 4 / 2;
    std::cout << typeid(value).name() << std::endl;
    return value;
}

__declspec(dllexport)
void SwapMe(int *first, int *second)
{
    int tmp = *first;
    *first = *second;
    *second = tmp;
}
Run Code Online (Sandbox Code Playgroud)

当我看到dumpin/exports时,我得到了:

ordinal hint RVA      name

      1    0 00001010 ?SwapMe@@YAXPEAH0@Z
      2    1 00001270 ?TestCall@@YAHXZ
Run Code Online (Sandbox Code Playgroud)

我正在调用C#这样的版本:

[DllImport(@"lib1.dll", EntryPoint = "?TestCall@@YAHXZ",
CallingConvention = CallingConvention.Cdecl)]
static extern int TestCall();
Run Code Online (Sandbox Code Playgroud)

这不是使用导出方法的正确形式.我在C++ DLL项目中为导出方法生成这样的名称失败了吗?

dll pinvoke cdecl dllexport dumpbin

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

C#unsafe type - > char*[],在char数组上获取指针

有:

[DllImport("OpenAL32.dll")]
static extern void alcOpenDevice(char*[] devicename);
Run Code Online (Sandbox Code Playgroud)

想把这个名字发送给像smth那样的函数:

char[] data = "Hello!".ToCharArray();
char*[] txt = &data;
Run Code Online (Sandbox Code Playgroud)

但得到错误:

  • 无法隐式转换char[] *char * []

    (有趣的错误,因为C#编译器拒绝char[] *在/ unsafe模式中定义:))

  • 不能获取地址,获取大小,或声明指向托管类型的指针(char[])

PS
何时char成为管理?这是一个结构,不是吗?

public struct Char : IComparable, IConvertible, IComparable<char>, IEquatable<char>
Run Code Online (Sandbox Code Playgroud)

虽然编译器显示有关声明指向托管类型(char[])的指针的信息.我只能建议当类型是一个数组时,CLR可能会像管理类型一样呈现它,但听起来非常疯狂.

c# arrays pinvoke pointers unsafe

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

EXE竞争(针对.NET应用程序)算法在二进制代码中显示具有真实人名的奇怪字符

刚打开刚才编译的.net应用程序并在文件的二进制结构中找到了下一个:

在此输入图像描述

我刚刚使用我的HTTP解析器工具,我正在使用子串搜索算法进行训练,并在不同的地方找到了一些人类"Ivan Medvedev"的真实姓名.

它是什么?

.net compression algorithm exe runtime

0
推荐指数
1
解决办法
197
查看次数

为什么"\n"是真的不能比较?

请看这里的场景,请:http://social.microsoft.com/Forums/getfile/3600/ 为什么它不匹配?

c# xml compare file match

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

SSL client-hello,消息体结构

我正在尝试使用SSL而不使用libs作为OpenSSL等...而且我在第一步有来自客户端的Hello消息有错.

来自technet:

It must consist of:
ClientVersion 3,1
ClientRandom[32]
SessionID: None (new session)
Suggested Cipher Suites:
   TLS_RSA_WITH_3DES_EDE_CBC_SHA
   TLS_RSA_WITH_DES_CBC_SHA
Suggested Compression Algorithm: NONE
Run Code Online (Sandbox Code Playgroud)

在我的代码(C/C++)中,我以这种方式创建了消息:

char *request = "ClientVersion 3,1\r\nClientRandom[32]\r\n
SessionID: None (new session)\r\n
Suggested Cipher Suites:\r\n
TLS_RSA_WITH_3DES_EDE_CBC_SHA\r\n
TLS_RSA_WITH_DES_CBC_SHA\r\n
Suggested Compression Algorithm: NONE\r\n";
Run Code Online (Sandbox Code Playgroud)

但是在recv()函数之后,我的结果是0,所以我的消息结构有什么问题?

PS在HTTP-proto中有一个地方,当必须是双\ r \n(分割标题和正文消息),可能是,必须有这样的东西吗?

ssl

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

将C代码移植到不安全的C#时的NullReference?

我试图在C#中实现Knuth-Morris-Pratt算法,类似于纯C中的实现.

请不要告诉我关于正则表达式和C#中的内存工作.因为,本主题的目的不是C#特性的真实和有用,而是关于C#中指针的工作,以及关于学习这些特性的内存工作.

让我向您展示C#和纯C的实现.

C#http://ideone.com/Ck0G0

Pure C http://ideone.com/FVAzU

我对Pure C中的版本没有任何问题,它没有问题,但没有C#版本.

我在这行上遇到了C#的问题:

    int*[] d = new int*[M * sizeof(int)];
    *d[0] = 0;
Run Code Online (Sandbox Code Playgroud)

我正在捕捉NullReferenceException是通过将0值设置为*d [0]来处理的.

我看过这个参考:

http://msdn.microsoft.com/en-en/library/system.nullreferenceexception.aspx

尝试取消引用空对象引用时引发的异常.

我完全不明白为什么这个东西在我的C#代码中是空的?

我已经定义了*d指向int []数组的指针并使用new []运算符为此分配了内存,为什么它告诉我,如果已经分配了内存,我将取消引用空对象引用?

还有一个关于在C#中明确删除指针的问题.

我知道,它可以用固定的方式完成,但如果我想要这个而不使用这个关键字?

我记得,我必须为此调用Dispose()方法(但是我没有找到这个方法),设置为null并调用GC.Collect().这是正确的方法吗?

谢谢,

最好的祝福!

c# pointers nullreferenceexception

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