标签: flags

枚举为标志使用,设置和移位

我有两面旗帜:

[Flags]
enum Flags
{
  A = 1,
  B = 2
};
Run Code Online (Sandbox Code Playgroud)

我这样设置它们:

Mode = Flags.A | Flags.B; // default value
for(int i = 0; i < args.Length; i++) {
switch(args[i])
{
  case "--a":
  {
    if ((Mode & Flags.A) == Flags.A && (Mode & Flags.B) == Flags.B) 
     // both, default assume
    {
      Mode = Flags.A; // only A
    }
    else
    {
      Mode |= Flags.A; // append A
    }
    break;
  }
  case "--b":
  {
    if ((Mode & Flags.A) == Flags.A && …
Run Code Online (Sandbox Code Playgroud)

.net c# enums flags

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

如何在NHibernate中查询存储为枚举的标志

如何进行HQL或Criteria搜索(后者是首选)涉及用作标志的枚举.换句话说,我有一个持久的枚举属性,存储某种标志.我想查询所有设置了这些标志之一的记录.使用Eq当然不会起作用,因为只有那是唯一的标志才会成立.

使用Criteria API解决这个问题是最好的,但是如果只使用HQL这样做也很好.

c# nhibernate enums flags criteria

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

WS_EX_TRANSPARENT-它实际上是做什么的?

在我的项目中,我创建一个具有用户控制的不透明度的表单。如果表单是完全透明的,则鼠标事件会“消失”(无需我干预),否则我的表单会处理它们。

阅读此问题并覆盖CreateParams属性以WS_EX_TRANSPARENT在窗体上设置标志后,当不透明度为任何<255的值时,它现在允许滑入鼠标事件。

这正是我想要的,但令我担心的是,我不明白它为什么起作用。

根据我的阅读,WS_EX_TRANSPARENT旨在通过在其Paint方法中从其下方的表单中“窃取位”来使该表单显得透明。

  1. 我的窗体的Paint方法及其中的所有控件都不应调用,对吗?由于WS_EX_TRANSPARENT应该导致Windows覆盖它们,所以为什么它会影响输入处理而不影响表单的绘制?

  2. 不透明度应该对鼠标事件的处理没有影响,就好像Paint被覆盖一样,“局部”不透明度应该没关系,不是吗?

可能有人解释,这是什么标志真的呢?它是如何工作的?

c# forms winapi flags winforms

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

如何使用 g++47 允许 -z multidefs

如何告诉链接器g++允许多个符号定义(选择第一个出现)?

-z multidefs 允许多个符号定义。默认情况下,可重定位对象(.o 文件)之间出现的多个符号定义将导致致命错误条件。此选项抑制错误条件并允许采用第一个符号定义。此选项仅在指定了 -b svr4 选项时有效。

-zmuldefs不能识别该选项g++,也不能识别-z OPTION。什么是正确的参数?是否可以?

c++ linker flags g++ linker-flags

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

LAHF(加载带有标志寄存器低位字节的AH)

使用LAHF,AH寄存器可以加载标志寄存器的高位字节.标志寄存器有7个未定义的寄存器.我有两个问题.

1)LAHF操作中是否考虑了未定义的位?

2)如果考虑,标志寄存器中的未定义位是二进制1还是二进制0?

x86 assembly flags

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

readelf 命令中 mips 标志的含义?

我在Linux上执行了命令“readelf -h test”(“test”是我的二进制程序),并得到以下文本:

ELF header:
   Magic:  7f 45 4c 46 ....
   Data:   2's complement, little endian
   ...
   **Flags: 0x1007, noreorder, pic, cpic, o32, mips1**
   ...
Run Code Online (Sandbox Code Playgroud)

您能详细告诉我上面文字中各个标志的含义吗?

我用谷歌搜索过,但找不到答案。任何意见将不胜感激。

linux flags mips readelf

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

反转枚举标志

可以说我有以下标志:

[Flags]
public enum Foo
{
    None = 0,
    Foo1 = 1,
    Foo2 = 2,
    Foo4 = 4,
    Foo8 = 8
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个变量foo:

var foo = Foo.Foo1 | Foo.Foo4;
Run Code Online (Sandbox Code Playgroud)

我想要得到的是以下倒置的旗帜foo.这意味着这样的事情:

Foo.Foo2 | Foo.Foo8
Run Code Online (Sandbox Code Playgroud)

我试过〜运算符.但由于我的枚举是一个int32值,它反转所有32位.但实际上我只需要反转我使用的位Foo enum.

编辑:Foo1 | Foo4将等于以下位掩码:

00000000 00000000 00000000 00000101
Run Code Online (Sandbox Code Playgroud)

如果使用〜运算符反转该位掩码,则会得到以下结果:

11111111 11111111 11111111 11111010
Run Code Online (Sandbox Code Playgroud)

我希望得到的结果是:

00000000 00000000 00000000 00001010
Run Code Online (Sandbox Code Playgroud)

如你看到的.我只是想通过Foo枚举反转USED位.不是整个32整数值的所有位.

c# enums flags bit-manipulation

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

用于在 Android 中启动新 Activity 的多个 Intent 标志

我正在尝试在 Intent 中添加更多标志,以便在 BroadcastReceiver 内启动新的 Activity,以响应从应用程序的其他部分发送的特定意图。正如我通过 LogCat 消息注意到的那样,我FLAG_ACTIVITY_NEW_TASK在我创建的 Intent 处添加了标志,然后添加了其他标志,但我在 LogCat 中遇到了相同的错误,因为该错误FLAG_ACTIVITY_NEW_TASK不存在。

这是代码:

 public class actReceiver extends BroadcastReceiver {
 ...
    public void onReceive(Context context, Intent intent) {
    ...
     else if (intent.getAction().equals("something")) {
                Intent prefAct = new Intent(context, PreferencesActivity.class)
                prefAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                       .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
                       .setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
                       .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(prefAct);
            }
     ... }
... }
Run Code Online (Sandbox Code Playgroud)

以及特定的 LogCat 错误:

Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Run Code Online (Sandbox Code Playgroud)

flags android broadcastreceiver android-intent android-activity

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

如何丢弃在我的应用程序中导入的第三方包中定义的标志

考虑一下,我的应用程序使用第三方库。我希望我的应用程序仅接受应用程序中定义的标志,而不接受导入的包中定义的标志。

package main

import (
    "flag"
    "fmt"
    log "github.com/golang/glog"
)

var myFlag int

func init() {
    flag.IntVar(&myFlag, "my_flag", 0, "need only my flags")
    confDir := "/Users/foo/test/logs" //assume this is read from configuration file
    flag.Set("log_dir", confDir)
    flag.Parse()
}

func main() {
    flag.Parse()
    log.Errorln("flag", myFlag)
    log.V(0).Infoln("flag", myFlag)
    fmt.Println("test", myFlag)
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码示例中,日志包有很多标志。编译后,当我执行以下命令时,将显示包括“my_flag”在内的所有标志和日志包中的标志。但是,我想使用从配置文件获取的值来设置代码中日志包标志的值。

  -alsologtostderr
        log to standard error as well as files
  -log_backtrace_at value
        when logging hits line file:N, emit a stack trace
  -log_dir string
        If non-empty, write log files in this directory
  -logtostderr …
Run Code Online (Sandbox Code Playgroud)

flags command-line go

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

标志的按位运算?

我见过一些使用按位运算来创建选项/标志的代码。

例如,请考虑ssl 库中的以下示例:

# bitwise AND and NOT
ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
ctx.options &= ~ssl.OP_NO_SSLv3

# bitwise OR
client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
client_context.options |= ssl.OP_NO_TLSv1
client_context.options |= ssl.OP_NO_TLSv1_1
Run Code Online (Sandbox Code Playgroud)

这些标志的数值:

>>> ssl.OP_NO_SSLv3.value
33554432
>>> ssl.OP_NO_TLSv1.value
67108864
>>> ssl.OP_NO_TLSv1_1.value
268435456
Run Code Online (Sandbox Code Playgroud)

我不明白这种创建标志的系统是如何工作的,或者这些数字是如何选择的。我已经研究了操作符的工作方式,但我仍然感到困惑。

有人可以解释一下这是如何工作的,以及适当的用例吗?

python flags bit-manipulation

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