小编Gun*_*iez的帖子

正则表达式匹配空格,但不是"字符串"

我正在寻找一个常规的exression匹配空格,只有当thos空格没有用双引号(")括起来时.例如,在

Mary had "a little lamb"
Run Code Online (Sandbox Code Playgroud)

它应该匹配第一个和第二个空间,而不是其他空间.

我想将字符串拆分在不在双引号中的空格处,而不是在引号处.

我正在使用C++与Qt工具包,并希望使用QString :: split(QRegExp).QString与std :: string非常相似,而QRegExp基本上是封装在类中的POSIX正则表达式.如果存在这样的正则表达式,那么拆分将是微不足道的.

例子:

Mary had "a little lamb"     =>   Mary,had,"a little lamb"
1" 2 "3                      =>   1" 2 "3 (no splitting at ")
abc def="g h i" "j k" = 12   =>   abc,def="g h i","j k",=,12
Run Code Online (Sandbox Code Playgroud)

对于编辑很抱歉,当我首先提出问题时,我非常不精确.希望现在更加清晰.

c c++ regex qt

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

抓取8字节字的高4字节

我在倍增0x1d400 * 0xE070381D.

当我在计算器上执行此操作时,结果是 0x00019A4D26950400

当我尝试在cpp中实现这个时,我就拥有了.

long long d;

d = 3765450781 * 1d400;
Run Code Online (Sandbox Code Playgroud)

这段代码给出的结果是d = 0x26950400.这只是底部的4个字节,其他一切都发生了什么?

我试图隔离上面的4个字节0x00019A4D并将它们保存到另一个变量中.如何才能做到这一点?

如果我可以得到乘法显示所有8个字节,我想要做的是隔离上面的4个字节是:

d = d & 0xFF00; //0xFF00 == (binary) 1111111100000000

d = d>>8;
Run Code Online (Sandbox Code Playgroud)

这会有用吗?

c c++ long-long

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

测试模板参数的签名

我需要掩盖一些值的前导位.如果该值是无符号的,我可以断言(保证)没有设置任意数量的前导位,即保证该值是有限的.

如果签名,我需要掩盖前导位(将值转换为一些不可移植的位,是的,我知道这一点:-)).如果值是无符号的,我想保存屏蔽操作.

所以我基本上有

template<typename T, some more template parameters>
class {
    unsigned transform(T value) {
        ...
        if (isSigned(T)) {
            value &= mask;
        }
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以编写一个isSigned(),它可以在编译时进行评估(以使优化器能够删除未签名的死代码)?

当然我可以添加另一个模板参数......

c++ templates

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

如何使用SSE计算某个范围内的字节数?

我想编写一个 ac 程序来计算某个范围内的字节数a...c使用以下代码:

char a[16], b[16], c[16];  
int counter = 0; 
for(i = 0;  i < 16; i++)  
{  
  if((a[i] < b[i]) && (b[i] < c[i]))  
  counter++;  
}  
return counter;  
Run Code Online (Sandbox Code Playgroud)

我打算做这样的事情

__m128i result1 = _mm_cmpgt_epi8 (b, a);  
__m128i result2 = _mm_cmplt_epi8 (b, c);  
unsigned short out1 = _mm_movemask_epi8(result1);  
unsigned short out2 = _mm_movemask_epi8(result2);  
unsigned short out3 = out1 & out2;  
unsigned short out4 = _mm_popcnt_u32(out3);   
Run Code Online (Sandbox Code Playgroud)

我的方法正确吗?有更好的方法吗?

x86 sse simd

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

具有别名的可变大小的位域

我有一些结构包含一个位域,其大小可能会有所不同.例:

struct BitfieldSmallBase {
    uint8_t a:2;
    uint8_t b:3;
    ....
}

struct BitfieldLargeBase {
    uint8_t a:4;
    uint8_t b:5;
    ....
}
Run Code Online (Sandbox Code Playgroud)

和一个联合访问所有位一次:

template<typename T>
union Bitfield 
{
    T bits;
    uint8_t all;    // <-------------  Here is the problem

    bool operator & (Bitfield<T> x) const {
        return !!(all & x.all);
    }
    Bitfield<T> operator + (Bitfield<T> x) const {
        Bitfield<T> temp;
        temp.all = all + x.all;   //works, because I can assume no overflow will happen
        return temp;
    }
    ....
}

typedef Bitfield<BitfieldSmallBase> BitfieldSmall; …
Run Code Online (Sandbox Code Playgroud)

c++ bit-fields

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

非整数静态数据的类内初始化

所以我刚刚通过编译器错误了解到数组的类内初始化是无效的(为什么?).现在我想在模板类中初始化一些数组,不幸的是内容依赖于模板参数.精简的测试用例如下所示:

template<typename T>
struct A {
    T x;
    static const int len = sizeof(T);         // this is of course fine
    static const int table[4] = { 0, len, 2*len, 3*len };    //this not
}
Run Code Online (Sandbox Code Playgroud)

知道如何拉出常数阵列吗?

编辑:添加了'int'.

c++ static

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

装配六角转储

我试图学习x86程序集中的调试,我正在尝试调试我的简单C程序.但是,我对如何在内存中存储大值(如字符串)感到困惑.例如,假设我将字符串VEQ9SZ9T8I62ZCIWE6RKZDE6AZSI2存储在寄存器EBX的地址0012E965处,我查看该地址的十六进制转储,我怎么知道它的结束位置?假设我没有在该位置存储好的ASCII字符串,我怎么知道该特定地址的十六进制转储结束的位置?正如你所看到的,我是大会的初学者,所以我感谢大家的耐心和帮助.

c x86 assembly

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

标签 统计

c++ ×5

c ×3

x86 ×2

assembly ×1

bit-fields ×1

long-long ×1

qt ×1

regex ×1

simd ×1

sse ×1

static ×1

templates ×1