小编Lar*_*ryF的帖子

RegEx解析或验证Base64数据

是否可以使用RegEx来验证或清理Base64数据?这是一个简单的问题,但推动这个问题的因素是让它变得困难的因素.

我有一个Base64解码器,不能完全依赖输入数据来遵循RFC规范.所以,我面临的问题可能是Base64数据可能没有被分解成78个问题(我认为它是78,我必须仔细检查RFC,所以如果确切的数字是错误的话,请不要告诉我)线条,或线条可能不以CRLF结尾; 因为它可能只有CR,或LF,或者两者都没有.

所以,我有一段时间解析Base64数据格式化.因此,以下示例变得不可能可靠地解码.为简洁起见,我只会显示部分MIME标头.

Content-Transfer-Encoding: base64

VGhpcyBpcyBzaW1wbGUgQVNDSUkgQmFzZTY0IGZvciBTdGFja092ZXJmbG93IGV4YW1wbGUu
Run Code Online (Sandbox Code Playgroud)

好的,所以解析没问题,这正是我们所期望的结果.在99%的情况下,使用任何代码来至少验证缓冲区中的每个字符都是有效的base64字符,完美地运行.但是,下一个例子会给混合物带来麻烦.

Content-Transfer-Encoding: base64

http://www.stackoverflow.com
VGhpcyBpcyBzaW1wbGUgQVNDSUkgQmFzZTY0IGZvciBTdGFja092ZXJmbG93IGV4YW1wbGUu
Run Code Online (Sandbox Code Playgroud)

我在一些病毒和其他试图利用某些邮件阅读器的东西中看到的Base64编码版本希望不惜一切代价解析mime,而不是严格按照本书,或者说RFC; 如果你愿意的话.

我的Base64解码器将第二个示例解码为以下数据流.请记住,原始流是所有ASCII数据!

[0x]86DB69FFFC30C2CB5A724A2F7AB7E5A307289951A1A5CC81A5CC81CDA5B5C1B19481054D0D
2524810985CD94D8D08199BDC8814DD1858DAD3DD995C999B1BDDC8195E1B585C1B194B8
Run Code Online (Sandbox Code Playgroud)

任何人都有一个很好的方法来解决这两个问题?我不确定它是否可能,除了对应用了不同规则的数据进行两次转换,并比较结果之外.但是,如果您采用这种方法,您信任哪个输出?似乎ASCII启发式算法是最好的解决方案,但是代码,执行时间和复杂性会增加多少像病毒扫描程序一样复杂的东西,这个代码实际上涉及到什么?您如何训练启发式引擎以了解什么是可接受的Base64,什么不是?


更新:

对于这个问题继续得到的观点数量,我已经决定发布我已经在C#应用程序中使用的简单RegEx 3年了,有数十万个事务.老实说,我喜欢Gumbo给出的最好的答案,这就是我选择它作为选定答案的原因.但是对于任何使用C#的人来说,并且寻找一种非常快速的方法来至少检测字符串或byte []是否包含有效的Base64数据,我发现以下内容对我来说非常有用.

[^-A-Za-z0-9+/=]|=[^=]|={3,}$
Run Code Online (Sandbox Code Playgroud)

是的,这仅适用于Base64数据的STRING,而不是格式正确的RFC1341消息.因此,如果您正在处理此类数据,请在尝试使用上述RegEx之前将其考虑在内.如果您正在处理Base16,Base32,Radix甚至Base64用于其他目的(URL,文件名,XML编码等),那么强烈建议您阅读Gumbo在其答案中提到的RFC4648,因为您需要做得好在尝试使用此问题/答案集中的建议之前,请了解实现所使用的字符集和终止符.

regex base64 standards-compliance rfc

92
推荐指数
8
解决办法
11万
查看次数

C86上的64位循环性能

我需要使用原始套接字的一些IPv4 ICMP处理代码的Internet Checksum功能(一个补码校验和),我偶然发现了我无法在64位Intel处理器上解释的行为(使用gcc 4.8.2).我想知道是否有人可以对此有所了解.

我使用32位累加器实现了第一个校验和功能,并执行了16位和.然后我使用64位累加器和32位求和实现了相同的功能,认为更少的总和将导致更快的执行.结果是第一个实现的运行速度是第二个实现的两倍(使用O3优化).我简直无法弄清楚为什么......

下面的代码实际上并没有执行准确的校验和(我简化了它),但说明了问题.两者都编译为在64位本机平台上运行64位(LP64:短16位,int 32位,长64位,指针64位).

  1. 32位累加器和16位和

    unsigned short
    cksum_16_le(unsigned char* data, size_t size)
    {
        unsigned short word;
        unsigned int sum = 0;
        unsigned int i;
    
        for(i = 0; i < size - 1; i += 2)
            sum += *((unsigned short*) (data + i));
    
        sum = (sum & 0xffff) + (sum >> 16);
        sum = (sum & 0xffff) + (sum >> 16);
    
        return ~sum;
    }
    
    Run Code Online (Sandbox Code Playgroud)

在相同的10k数据上调用50,000个函数:~1.1秒.

  1. 64位累加器和32位和

    unsigned short
    cksum_32_le(unsigned char* data, size_t size)
    {
        unsigned long word;
        unsigned …
    Run Code Online (Sandbox Code Playgroud)

c algorithm performance 64-bit

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

类似的String算法

我正在寻找一种算法,或者至少是关于如何在两个或多个不同的字符串中找到类似文本的操作理论......

就像这里提出的问题一样:查找具有相似文本的文章的算法,区别在于我的文本字符串只会是少数单词.

就像说我有一个字符串:"进入清澈的蓝天",我正在与以下两个字符串进行比较:"颜色是天蓝色"和"在蓝色的晴空中"

我正在寻找一种可用于匹配两者中文本的算法,并决定它们的匹配程度.在我的情况下,拼写和标点符号将是重要的.我不希望它们影响发现真实文本的能力.在上面的例子中,如果颜色参考被存储为"'天蓝色'",我希望它仍然能够匹配.但是,列出的第3个字符串应该比第二个字符串更好,等等.

我敢肯定谷歌这样的地方可能会使用类似于"你是不是的意思:"的功能......

*编辑*
在与朋友交谈时,他与一位撰写有关此主题的论文的人合作.我想我可能会与阅读此内容的所有人分享,因为其中描述了一些非常好的方法和流程......

这是他的论文链接,我希望它对阅读这个问题的人以及类似的字符串算法的主题有所帮助.

c c++ string algorithm

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

C#多线程应用程序可以在每个线程中使用单独的WorkingDirectories吗?

在C#(.NET)中,在同一个应用程序中运行的两个线程可以有不同的"WorkingFolders"吗?

我可以说,最好的答案是"不".我认为WORKING DIR是由Win32中的PROCESS设置的.我错了吗?

根据以下测试代码(以及Win32 SetCurrentDirectoryAPI调用),这是不可能的,但有没有人想出一种方法来实现它?

using System;
using System.Threading;

public class TestClass {

  public  ManualResetEvent _ThreadDone = new ManualResetEvent(false);

  public static void Main() {
    Console.WriteLine(Environment.CurrentDirectory);

    Thread _Thread = new Thread(new ParameterizedThreadStart(Go));
    TestClass test = new TestClass();

    _Thread.Start(test);
    if(test._ThreadDone.WaitOne()) {
      Console.WriteLine("Thread done.  Checking Working Dir...");
      Console.WriteLine(Environment.CurrentDirectory);
    }
  }

  public static void Go(object instance) {
    TestClass m_Test = instance as TestClass;
    Console.WriteLine(Environment.CurrentDirectory);
    System.IO.Directory.SetCurrentDirectory("L:\\Projects\\");
    Console.WriteLine(Environment.CurrentDirectory);
    m_Test._ThreadDone.Set();
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道有人在那之前必须遇到过这个!

.net c# multithreading

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

在预编译的ASP.NET 2.0站点上编译错误CS0433

当我启动调试器来调试我的站点时,我经常会遇到这个错误.我正在使用Telerik控件,通常错误在我的标签条中.以下是我正在查看的错误示例:

Compiler Error Message: CS0433: The type 'ASP.controls_motorvehiclegeneral_ascx' exists in both 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\App_Web_6wlqh1iy.dll' and 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\App_Web_ro_sgchs.dll'

Source Error:

Line 48:     </telerik:RadTabStrip>
Line 49:     <telerik:RadMultiPage ID="RadMultiPageControls" Runat="server" SelectedIndex="0">
Line 50:     <telerik:RadPageView ID="PageGeneral" runat="server"><uc1:General ID="GeneralControl" runat="server" /></telerik:RadPageView>
Line 51:     <telerik:RadPageView ID="PageVehicle" runat="server"><uc1:VehicleList ID="VehicleList" runat="server" /></telerik:RadPageView>
Line 52:     <telerik:RadPageView ID="PagePerson" runat="server"><uc1:PersonList ID="PersonList" runat="server" /></telerik:RadPageView>
Run Code Online (Sandbox Code Playgroud)

最困扰我的是,如果我只是继续按F5,页面将刷新并按预期工作.有时需要多次刷新才能完成此操作,有些则需要很快才能完成.我无法在网上找到解决方案,因为大多数有此错误的人正在从VS2005升级到Web应用程序,因此修复似乎是"删除您的app_code目录,并将CodeFile =更改为CodeBehind =但是,CodeBehind已经过时了,不再使用了.

在这种情况下,我在"常规"选项卡上收到错误,但是当它发生时,可能会发生任何用户控件.

还有其他人用预编译的页面看过这个吗?我正在使用VS2008 SP1.

我看到的与此相关的另一个影响是当我有一个带有数据源的GridView设置,并且数据源发生了变化,但是在几个其他操作之前页面不会更新,然后所有数据都被填充...这让我觉得存在某种缓存问题,或者编译时,超时或者什么......

我正在使用site.master页面,并检查了@Page和@Master指令...只是为了参数,这里是它使用的编译器选项...

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE> "c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe" /t:library /utf8output /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\assembly\dl3\6614ff9a\005164fc_423cc801\PetersDatePackage.DLL" /R:"C:\WINDOWS\assembly\GAC_MSIL\System.IdentityModel\3.0.0.0__b77a5c561934e089\System.IdentityModel.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll" /R:"C:\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.Common.dll" /R:"C:\WINDOWS\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\App_Web_0-em44qa.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary …

c# asp.net compiler-construction asp.net-2.0 telerik

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

在C#和C++之间共享源文件

我有一个主要用C#编写的项目.我需要为该项目的API的所有错误号"定义"定义一个类.我试图避免编写/改变我的许多代码生成器之一来实现这一目标.

我想要做的是能够直接#include内容(如错误defiles)到C/C++项目.我在C#中定义它们如下,我没有使用枚举来看你会在这里看到的东西:

using System;

namespace ProjectAPI {

[Serializable]
public sealed class ProjectError {

    public enum ProjectErrorClass {
        None            = -1,
        Undefined       = 0,
        Login,
        Store,
        Transaction,
        Heartbeat,
        Service,
        HTTPS,
        Uploader,
        Downloader,
        APICall,
        AutoUpdate,
        General
    }

    public enum ProjectErrorLevel {
        Unknown = -1,
        Success = 0,
        Informational,
        Warning,
        Critical,
    };

    /// <summary>
    /// PROJECT_ERROR_BASE - This is the base for all Project defined errors in the API.  Project Errors are defined as follows:
    ///   ProjectAPI error values are 32 …
Run Code Online (Sandbox Code Playgroud)

c# c++ enums code-sharing

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

如何反汇编.lib静态库?

我已经用c编写了这个简单的库:

library.h:

int sum(int a, int b);
Run Code Online (Sandbox Code Playgroud)

library.c:

#include "library.h"
int sum(int a, int b) {
    return a+b;
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令使用cl.exe(Visual Studio 2012)对其进行了编译:

cl /c /EHsc library.cpp
lib library.obj
Run Code Online (Sandbox Code Playgroud)

它将其编译为静态链接.lib库文件。现在,我想看看出于学习/学术目的,编译器如何生成汇编代码。请注意,我不想反编译它,我只想阅读生成的程序集。我试图用w32dasm打开.lib,但是出现很多奇怪的符号,看来该工具无法读取该文件。我已经使用了动态链接库(从相同的源生成)完成了类似的任务,并且有效。因为我能够使用w32dasm查看汇编代码。因此,我的问题是:是否可以像使用动态链接库那样查看静态链接库的汇编代码?如果是这样,那将是正确的工具,因为w32dasm似乎不是正确的工具。

c static-libraries disassembly

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

ASP.NET多字段验证

在ASP.NET 2中,我使用了Field Validators和RequiredField验证器,但我不确定如何处理这样的情况.
我在页面上有两个复选框,我需要确保至少设置了其中一个复选框.所以,如果你看二进制,它可以是01,10或11,但它不能是00.我的问题是,使用复选框最好的方法是什么?

普通的ASP验证器可以处理这个,或者我是否需要创建一个如上所述的整数值,隐藏在某处并使用RangeValidator进行测试以确保THAT值永远不为零?

c# asp.net

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

如何使用临时变量在Objective-C/Xcode中定义返回的NSString函数?

我想在Objective-C中定义以下函数.我提供了伪代码来帮助说明我正在尝试做什么.

伪代码:

function Foo(param) {
  string temp; 

if(param == 1) then
  temp = "x";
else if(param == 2) then
  temp = "y";
else if(param == 3) then 
  temp = "z";
else
  temp = "default";
end if    

  return temp;
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,如果我这样做...我分配给它的变量导致"BAD Access"错误.

我不知道之间有什么区别:

static NSstring *xx;
Run Code Online (Sandbox Code Playgroud)

或非静态的:

NSString *xx;
Run Code Online (Sandbox Code Playgroud)

声明是,以及如何或为什么我想要使用一个而不是另一个.

我也不完全理解NSString的初始化器,以及它们之间的区别.例如:

[[NSString alloc] initWithString:@"etc etc" ];
Run Code Online (Sandbox Code Playgroud)

或简单的任务:

var = @""
Run Code Online (Sandbox Code Playgroud)

甚至:

var = [NSString stringWithString:@"etc etc"];
Run Code Online (Sandbox Code Playgroud)

你可以帮我一把吗?

到目前为止,使用从上面列出的函数返回的NSString值总是会导致错误.

iphone xcode function objective-c nsstring

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

CSS类合并

有人能解释一下这个问题吗?预期结果似乎没有发生......我的假设是否正确?

.float-right{
  float:right;
}

.header{
   (stuff we don't care about)
}

.header img .float-right {
  display:inline;
  margin:0 0 0 0.5em;
}
Run Code Online (Sandbox Code Playgroud)

以为这将意味着一个<div类="头">在<img>标签将得到:

float:right;
display:inline;
margin:0 0 0 0.5em;
Run Code Online (Sandbox Code Playgroud)

如果 <img>标签是class ="float-right"

它是否正确?

html css

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