循环遍历hex / prop_id值

时间:2012-10-26 19:57:31

标签: c++ hex

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

我想检查所有可能的prop_ids,我想到的最佳方法是循环使用它们。在c ++中,我可以通过调用

来声明prop_id
prop_id = 0x0000

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

prop_id pid = 0x000; 

接下来是pid ++,但这似乎返回了一个长度为8位的十六进制。

1 个答案:

答案 0 :(得分: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来电。