【问题标题】:loop through hex/prop_id values循环遍历 hex/prop_id 值
【发布时间】:2012-10-26 19:57:31
【问题描述】:

我正在用 c++ 编写一个用于 pst 提取的程序。

我想检查所有可能的 prop_ids,我能想到的最好方法是遍历它们。在 C++ 中,我可以通过调用来声明 prop_id

prop_id = 0x0000

我想增加这个的 0000 边。这个prop_id 需要一个十六进制数。我怎样才能增加0000的值。我试过了

prop_id pid = 0x000; 

随后是 pid++,但这似乎返回了 8 位长的十六进制数。

【问题讨论】:

  • 听起来像你有 32 位整数,你希望它们表现得像 16 位。这不一定是问题,但您的解释不清楚。准确显示您在递增时的期望,以及您如何确定数字的“长度”。我的意思是,您要将其打印到屏幕/文件上吗?你在看内存内容吗?
  • 当我增加时,我期望 0x0000(最小值).. 0x00A3 .. 0xFFFF(最大值)。有了这些数据,我将尝试访问 mapi pst 属性。例如,我可以只使用 0x3456,但我想通过循环所有可能的十六进制值来查看我是否缺少 mapi 属性。
  • 以上是我期望的增量的一个小例子。 0x0001 0x0002 以此类推

标签: c++ hex


【解决方案1】:

我还是不明白这个问题。也许是因为您对什么是十六进制数字感到困惑。在计算机内部,无论我们以 2(二进制)、8(八进制)、10(十进制)还是 16(十六进制)写入数字,位都是一样的。

所以,取数字 16... 这些都是一样的:

unsigned short pid = 0b10000;  // binary (prefix with '0b' -- GCC only)
unsigned short pid = 020;      // octal (prefix with '0')
unsigned short pid = 16;       // decimal (no prefix)
unsigned short pid = 0x10;     // hexadecimal (prefix with '0x')

要循环,只需执行:

for( int i = 0; i <= 0xffff; i++ ) {
    printf( "%04x = %d\n", i, i );
}

如果使用unsigned short(16 位整数),循环时需要小心。如果你用上面的结构循环了一个unsigned short,它将永远循环,因为在增加0xffff 之后它会回到零。你可以这样做:

unsigned short i = 0;
do {
    printf( "%04hx = %hu\n", i, i );
    i++;
} while( i != 0 );  // Will become zero after completing 0xffff iteration.

无论如何,关键是,如果您只是将数字发送到某个函数,那么无论您将它们作为十六进制、十进制还是其他形式都没有关系......它们都是一样的。如果需要输出,请查看我的printf 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多