Tag: C#的

C ++将string转换为hex,反之亦然

在C ++中将string转换为hex,反之亦然的最佳方法是什么? 例: 像"Hello World"这样的string,格式为: 48656C6C6F20576F726C64 并从48656C6C6F20576F726C64到string: "Hello World"

最简单的方法来读取和写入文件

有很多不同的方式来读取和写入文件( 文本文件 ,而不是二进制)在C#中。 我只需要一些简单的东西,并且使用最less量的代码,因为我将在我的项目中使用很多文件。 我只需要一些string因为我只需要读取和写入string 。

在C#中浮点math是否一致? 是真的吗?

不,这不是另一个“为什么是(1 / 3.0)* 3!= 1”的问题。 最近我一直在读浮点数; 具体来说, 相同的计算如何在不同的体系结构或优化设置上给出不同的结果 。 对于存储重播的video游戏来说,这是一个问题,或者是对等networking (而不是服务器 – 客户端),这依赖于所有客户端在每次运行程序时产生完全相同的结果 – 一个小的差异浮点计算可能会导致不同机器上的游戏状态(甚至是在同一台机器上 ) 即使在“遵循” IEEE-754的处理器之间也会发生这种情况,主要是因为某些处理器(即x86)使用了双精度扩展 。 也就是说,他们使用80位寄存器来执行所有计算,然后截断为64位或32位,从而导致与使用64位或32位进行计算的机器不同的舍​​入结果。 我已经看到了这个问题的几个解决scheme在线,但所有的C + +,而不是C#: 使用_controlfp_s (Windows), _FPU_SETCW (Linux?)或fpsetprec (BSD)禁用双扩展精度模式(以便所有double计算使用IEEE-754 64位)。 总是使用相同的优化设置来运行相同的编译器,并要求所有用户具有相同的CPU架构(无跨平台播放)。 因为我的“编译器”实际上是JIT, 每次程序运行时可能会有不同的优化 ,所以我认为这是不可能的。 使用定点算术,并避免float和double 。 decimal可以用于这个目的,但会慢很多,并且没有一个System.Math库函数支持它。 那么, 这在C#中甚至是一个问题? 如果我只打算支持Windows(而不是Mono)呢? 如果是这样, 有没有办法强制我的程序以正常的双精度运行? 如果没有, 是否有任何库可以帮助保持浮点计算的一致性?

在C#中使用语句嵌套

我正在做一个项目,并且必须比较两个文件,看看他们是否相互激动。 我的第一个草案之前,错误检查和validation了很多: DirectoryInfo di = new DirectoryInfo(Environment.CurrentDirectory + "\\TestArea\\"); FileInfo[] files = di.GetFiles(filename + ".*"); FileInfo outputFile = files.Where(f => f.Extension == ".out").Single<FileInfo>(); FileInfo expectedFile = files.Where(f => f.Extension == ".exp").Single <FileInfo>(); using (StreamReader outFile = new StreamReader(outputFile.OpenRead())) { using (StreamReader expFile = new StreamReader(expectedFile.OpenRead())) { while (!(outFile.EndOfStream || expFile.EndOfStream)) { if (outFile.ReadLine() != expFile.ReadLine()) […]

为什么我可以使用私人types的汽车?

我有点惊讶,下面的代码编译和运行(vc2012&gcc4.7.2) class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } }; int main() { Foo f; // Foo::Bar b = f.Baz(); // error auto b = f.Baz(); // ok std::cout << bi; } 这段代码编译正确吗? 为什么它是正确的? 为什么我可以使用autotypes,而我不能使用它的名称(如预期的)?

哪个是首选的:可为空<>。HasValue或Nullable <>!= null?

我总是使用(a) Nullable<>.HasValue因为我喜欢语义。 但是,最近我正在使用别人现有的代码库(b) Nullable<> != null 。 是有理由相互使用,还是纯粹偏好? (一个) int? a; if (a.HasValue) … (b)中 int? b; if (b != null) …

导入库如何工作? 细节?

我知道这可能是非常基本的怪才。 但是我想把它弄清楚。 当我想要使用Win32 DLL时,通常我只是调用LoadLibrary()和GetProcAdderss()之类的API。 但是最近,我正在用DirectX9开发,我需要添加d3d9.lib , d3dx9.lib等文件。 我已经听够了,LIB是用于静态链接的,DLL是用于dynamic链接的。 所以我目前的理解是,LIB包含方法的实现,并在链接时作为最终EXE文件的一部分静态链接。 DLL是在运行时dynamic加载的,不是最终EXE文件的一部分。 但是有时候,DLL文件会附带一些LIB文件,所以: 这些LIB文件是什么? 他们如何达到他们的目的? 有没有什么工具可以让我检查这些LIB文件的内部? 更新1 检查维基百科后,我记得这些LIB文件被称为导入库 。 但我想知道它是如何与我的主要应用程序和DLLdynamic加载。 更新2 就像RBerteig所说的那样,DLL中生成的LIB文件中有一些存根代码。 所以调用顺序应该是这样的: 我的主要应用程序 – >存根在LIB – >真正的目标DLL 那么这些LIB应该包含哪些信息呢? 我可以想到以下几点: LIB文件应该包含相应DLL的完整path; 所以DLL可以被运行时加载。 每个DLL导出方法入口点的相对地址(或文件偏移量?)应编码到存根中; 因此,可以进行正确的跳转/方法调用。 我对吗? 还有更多吗? 顺便说一句:有什么工具可以检查导入库吗? 如果我能看到它,就不会有任何怀疑。

什么是最接近的东西窗户fork()?

我想这个问题说明了一切。 我想在窗户上分叉。 什么是最相似的操作,我如何使用它。

如何使用cout <<运算符填充前导零的int?

我想cout输出一个前导零的整数,所以值1将打印为001和值25打印为025 ..你明白了..我怎么能做到这一点? 谢谢。

在C#中确定一个string的编码

有没有什么办法来确定在C#中的string的编码? 说,我有一个文件名string,但我不知道它是否以Unicode UTF-16或系统默认编码编码,我怎么知道?