C# 解析系统日志优先级值(PRIVAL)的算法

C# 解析系统日志优先级值(PRIVAL)的算法,c#,.net,bit-manipulation,syslog,C#,.net,Bit Manipulation,Syslog,我想解析syslog条目中的私有信息,但是我很难理解所需的算法 说: 优先级值的计算方法是首先将设施编号乘以8,然后将严重性的数值相加 有了这些,我明白了 (X * 8) + y = [known number] 所以 或者 If (X * 8) + Y = 78 // What are the values of X and Y? 那么,解析这些信息的合适算法是什么呢?根据RFC 5424,优先级值由0..23范围内的设施值和0..7范围内的严重性值组成。给定优先级值,您可以按如下方式提取

我想解析syslog条目中的私有信息,但是我很难理解所需的算法

说:

优先级值的计算方法是首先将设施编号乘以8,然后将严重性的数值相加

有了这些,我明白了

(X * 8) + y = [known number]
所以

或者

If (X * 8) + Y = 78
// What are the values of X and Y?

那么,解析这些信息的合适算法是什么呢?

根据RFC 5424,优先级值由0..23范围内的设施值和0..7范围内的严重性值组成。给定优先级值,您可以按如下方式提取设施和严重性:

int priorityValue = 134; // using your example
int facility = priorityValue >> 3;
int severity = priorityValue & 7;
这是组合操作priorityValue=facility*8+严重性的简单反转,用于生成您在SYSLOG数据中看到的值。您还可以使用:

int facility = priorityValue / 8;

由于我们使用的是整数,这将给出与上面的位移位操作相同的结果。

根据RFC 5424,优先级值由0..23范围内的设施值和0..7范围内的严重性值组成。给定优先级值,您可以按如下方式提取设施和严重性:

int priorityValue = 134; // using your example
int facility = priorityValue >> 3;
int severity = priorityValue & 7;
这是组合操作priorityValue=facility*8+严重性的简单反转,用于生成您在SYSLOG数据中看到的值。您还可以使用:

int facility = priorityValue / 8;

因为我们使用的是整数,所以这应该会得到与上面的位移位操作相同的结果。

Corey的答案更全面,尽管C/C++,我还是更喜欢DIV和mods:

const int priority = 134; // using your example
const int facility = priority / 8;
const int severity = priority % 8;
反过来说:

const int priority = (facility * 8) + severity;

Corey的回答更全面,我更喜欢DIV和mods,尽管C/C++:

const int priority = 134; // using your example
const int facility = priority / 8;
const int severity = priority % 8;
反过来说:

const int priority = (facility * 8) + severity;

按位工作。我以前从来没有看过逐位计算,我想我有一些阅读要做。仍在试图了解为什么这是可行的背后的概念,但这里有一把小提琴来演示它。另外,当第二位int facility=priorityValue/8;适用于int,如果没有按位操作,如何获得适当的严重性?@ChaseFlorell或者:`var severity=priorityValue%8;'我使用按位操作是因为它们是专门为这类任务设计的。在大多数CPU上,8、16、32或64位值的位移位是一次操作,在大多数情况下非常快。模运算返回整数除法的余数,除非编译器对其进行优化,否则可能会慢得多。私人设施*8几乎同样糟糕——一个乘法和一个减法。两个较慢的操作而不是一个较快的操作。按位操作有效。我以前从来没有看过逐位计算,我想我有一些阅读要做。仍在试图了解为什么这是可行的背后的概念,但这里有一把小提琴来演示它。另外,当第二位int facility=priorityValue/8;适用于int,如果没有按位操作,如何获得适当的严重性?@ChaseFlorell或者:`var severity=priorityValue%8;'我使用按位操作是因为它们是专门为这类任务设计的。在大多数CPU上,8、16、32或64位值的位移位是一次操作,在大多数情况下非常快。模运算返回整数除法的余数,除非编译器对其进行优化,否则可能会慢得多。私人设施*8几乎同样糟糕——一个乘法和一个减法。两次较慢的操作而不是一次较快的操作。几年前我写了一篇关于这个主题的文章。几年前我写了一篇关于这个主题的文章。