Tag: C#的

为什么生成AND指令?

对于这样的代码: int res = 0; for (int i = 0; i < 32; i++) { res += 1 << i; } 此代码生成(发布模式,没有附加debugging器,64位): xor edx,edx mov r8d,1 _loop: lea ecx,[r8-1] and ecx,1Fh ; why? mov eax,1 shl eax,cl add edx,eax mov ecx,r8d and ecx,1Fh ; why? mov eax,1 shl eax,cl add edx,eax lea ecx,[r8+1] and ecx,1Fh […]

内存alignment:如何使用alignof / alignas?

我现在使用共享内存。 我无法理解alignof和alignas 。 cppreference不清楚: alignof返回“alignment”,但什么是“alignment”? 要为下一个要alignment的块添加的字节数? 填充大小? 堆栈溢出 /博客条目也不清楚。 有人可以清楚地alignof和alignas ?

我的自旋锁实现是否正确和最佳?

我正在使用旋转锁来保护非常小的关键部分。 争用很less发生,所以自旋锁比普通的互斥锁更合适。 我现在的代码如下,并假定x86和GCC: volatile int exclusion = 0; void lock() { while (__sync_lock_test_and_set(&exclusion, 1)) { // Do nothing. This GCC builtin instruction // ensures memory barrier. } } void unlock() { __sync_synchronize(); // Memory barrier. exclusion = 0; } 所以我想知道: 这段代码是否正确? 它是否正确确保相互排斥? 它是否适用于所有x86操作系统? 它也可以在x86_64上运行吗? 在所有操作系统上? 这是最佳的吗? 我已经看到使用比较和交换的自旋锁实现,但我不知道哪个更好。 根据GCCprimefacesbuild立的文档( http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html )还有__sync_lock_release 。 我不是内存障碍方面的专家,所以我不确定是否可以使用这个来代替__sync_synchronize 。 我正在优化的情况下,没有争议。 我根本不在意争论。 […]

使用JSON.NET序列化/反序列化对象字典

我试图序列化/反序列化一个Dictionary<string, object>这似乎正常工作,如果对象是一个简单的types,但对象是更复杂的时候不工作。 我有这个class级: public class UrlStatus { public int Status { get; set; } public string Url { get; set; } } 在我的字典中,我添加了一个List<UrlStatus>其中包含一个“redirect链”键和一些简单的string,其中键为“Status”,“Url”,“Parent Url”。 我从JSON.Net返回的string如下所示: {"$type":"System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib","Status":"OK","Url":"http://www.ehow.com/m/how_5615409_create-pdfs-using-bean.html","Parent Url":"http://www.ehow.com/mobilearticle35.xml","Redirect Chain":[{"$type":"Demand.TestFramework.Core.Entities.UrlStatus, Demand.TestFramework.Core","Status":301,"Url":"http://www.ehow.com/how_5615409_create-pdfs-using-bean.html"}]} 我用来序列化的代码如下所示: JsonConvert.SerializeObject(collection, Formatting.None, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple }); 反序列化我在做: JsonConvert.DeserializeObject<T>(collection, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, TypeNameAssemblyFormat = […]

关于多态性,引用和指针是否相等?

我一直认为必须使用多态指针。 使用规范的例子: DrawEngine::render(Shape *shape) { shape->draw(); shape->visible(true); } 并传递指向各种Shape派生类的指针。 它是否与参考一样工作? DrawEngine::render(Shape &shape) { shape.draw(); shape.visible(true); } 是否有效: engine.render(myTriangle); // myTriangle instance of class derived from Shape 如果这样做,这两个案件有什么分别吗? 我试图在Stroustrup中find信息,但是我什么也没find。 我重新开放了这个,因为我想多探索一下。 所以至less有一个区别是dynamic_cast。 对我来说,多态包括使用dynamic_cast。 我可以去吗 Rhomboid & r = dynamic_cast<Rhomboid &>(shape); 如果演员失败会发生什么? 这有什么不同吗? Rhomboid * r = dynamic_cast<Rhomboid*>(&shape);

为什么GCC会说“不再支持命名的返回值”?

我不小心在return语句之后放置了我的函数定义的大括号 int id(int k) return k; { } 但GCC回答了一个奇怪的错误消息 错误:不再支持命名的返回值 任何人都可以请解释一下这个奇怪的function可能是什么? 我从来没有听说过。

C中的关联数组

我正在实施一种将一组数据传输到可编程encryption狗的方法。 encryption狗基于智能卡技术,可以在其中执行任意代码。 input和输出数据作为可以通过input和输出指针访问的二进制块传递。 我想用一个关联数组来简化数据处理代码。 一切都应该这样工作: 首先是主机应用程序: // Host application in C++ in_data["method"] = "calc_r"; in_data["id"] = 12; in_data["loc_a"] = 56.19; in_data["loc_l"] = 44.02; processor->send(in_data); 接下来encryption狗内的代码: // Some dongle function in C char* method_name = assoc_get_string(in_data, "method"); int id = assoc_get_int(in_data, "id"); float loc_a = assoc_get_float(in_data, "loc_a"); float loc_l = assoc_get_float(in_data, "loc_l"); 所以我的问题是关于encryption狗部分的function。 是否有C代码或库来实现像上面这样的关联数组行为?

如何在C#中生成HMAC-SHA1?

我正在尝试使用C#使用REST API。 API创build者已经提供了PHP,Ruby和Java的示例库。 我正在挂上它的一部分,我需要生成一个HMAC 。 以下是他们提供的示例库中的工作方式。 PHP hash_hmac('sha1', $signatureString, $secretKey, false); ruby digest = OpenSSL::Digest::Digest.new('sha1') return OpenSSL::HMAC.hexdigest(digest, secretKey, signatureString) Java的 SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(), HMAC_SHA1_ALGORITHM); Mac mac = null; mac = Mac.getInstance(HMAC_SHA1_ALGORITHM); mac.init(signingKey); byte[] bytes = mac.doFinal(signatureString.getBytes()); String form = ""; for (int i = 0; i < bytes.length; i++) { String str = […]

在C ++中浮点加法是否可交换?

对于浮点值,保证a + b == b + a ? 我相信这在IEEE754中是有保证的,但是C ++标准没有规定必须使用IEEE754。 唯一相关的文本似乎来自[expr.add]#3: 二元运算符的结果是操作数的总和。 math运算“sum”是可交换的。 然而,math运算“sum”也是联想的,而浮点加法绝对不是联想的。 所以,在我看来,我们不能断定math中“sum”的交换性意味着这个引用在C ++中指定了交换性。

在Asp.Net MVC 5中获取login用户的用户名

我是相对较新的ASP.Net MVC,现在尝试使用内置的用户loginfunction。 我可以在注册视图中注册一个用户。 如果我尝试使用创build的用户login,这也可以。 我被redirect到主页面。 但我无法获得当前用户的用户名。 我在HomeController和AccountController中尝试了我的代码,但都没有工作。 第一行中的语句总是返回null。 var userID = User.Identity.GetUserId(); if (!string.IsNullOrEmpty(userID)) { var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(ApplicationDbContext.Create())); var currentUser = manager.FindById(User.Identity.GetUserId()); } 在获取用户ID之前,我还需要做些什么吗?