Tag: 二进制

如何检查我的字节标志?

我使用一个字节来存储一些标志,如10101010 ,我想知道如何validation特定位是1还是0 。

C问题:off_t(和其他有符号整数类型)的最小值和最大值

我偶尔会遇到一个整数类型(例如POSIX有符号整数类型off_t ),其中有一个宏的最小值和最大值是有帮助的,但我不知道如何制作一个真正可移植的宏。 对于无符号整数类型,我一直认为这很简单。 0表示最小值, ~0表示最大值。 我已经阅读了几个不同的SO线程,建议使用-1而不是-1来实现可移植性。 这里有一个有争议的有趣线程: c ++ – 使用-1将所有位设置为true是否安全? – 堆栈溢出 然而,即使在阅读了这个问题后,我仍然感到困惑。 另外,我正在寻找兼容C89和C99的东西,所以我不知道是否适用相同的方法。 说我有一种uint_whatever_t 。 难道我不能先转为0然后按位补码? 这样可以吗? #define UINT_WHATEVER_T_MAX ( ~ (uint_whatever_t) 0 ) 有符号的整数类型看起来像是一个更难以破解的坚果。 我已经看到了几种不同的可能解决方案,但只有一种似乎是可移植的。 无论是那个还是不正确的。 我在谷歌搜索OFF_T_MAX和OFF_T_MIN时找到了它。 感谢Christian Biere: #define MAX_INT_VAL_STEP(t) \ ((t) 1 << (CHAR_BIT * sizeof(t) – 1 – ((t) -1 < 1))) #define MAX_INT_VAL(t) \ ((MAX_INT_VAL_STEP(t) – 1) + […]

十进制到二进制

我有一个数字,我想在C中转换为二进制(从十进制)。 我希望我的二进制文件总是以5位(小数字永远不会超过31)。 我已经有一个通过分割手动完成的function,但很难将其填充到5位。 有没有更简单的方法? 也许使用按位移位? 我也希望二进制文件在char *表示

在C / C ++中有效地转换Hex,Binary和Decimal

我有正整数的3个基本表示: 十进制,在无符号长变量中(例如unsigned long int NumDec = 200 )。 hex,字符串变量(例如字符串NumHex =“C8” ) 二进制,字符串变量(例如字符串NumBin =“11001000” ) 我希望能够以最有效的方式在所有3个表示中的数字之间进行转换。 即实现以下6个function: unsigned long int Binary2Dec(const string & Bin) {} unsigned long int Hex2Dec(const string & Hex) {} string Dec2Hex(unsigned long int Dec) {} string Binary2Hex(const string & Bin) {} string Dec2Binary(unsigned long int Dec) {} string Hex2Binary(const string & Hex) […]

在C中将字符转换为二进制

我试图将一个字符转换为它的二进制表示(所以字符 – > ascii hex – >二进制)。 我知道这样做我需要转移和AND 。 但是,我的代码由于某种原因不起作用。 这就是我所拥有的。 *temp指向C字符串中的索引。 char c; int j; for (j = i-1; j >= ptrPos; j–) { char x = *temp; c = (x >> i) & 1; printf(“%d\n”, c); temp–; }

使用C在二进制表示中打印int

我正在寻找一个允许我打印int的二进制表示的函数。 到目前为止我所拥有的是什么; char *int2bin(int a) { char *str,*tmp; int cnt = 31; str = (char *) malloc(33); /*32 + 1 , because its a 32 bit bin number*/ tmp = str; while ( cnt > -1 ){ str[cnt]= ‘0’; cnt –; } cnt = 31; while (a > 0){ if (a%2==1){ str[cnt] = ‘1’; } […]

为什么在签名的二进制补码表示中-INT_MIN = INT_MIN?

我还没有找到最低签名负数没有等效签名正数的原因? 我的意思是在3位二进制数字中为简单起见100是-4? 但是我们不能以签名格式获得积极的4,因为我们不能。 它溢出了。 那么我们怎么知道两个补码1000是-4 1000 0000是-128等等? 我们没有原始正数

用于计数位的高效按位运算或找到最右侧的位

给定unsigned int,我必须执行以下操作: 计算设置为1的位数 找到最左边1位的索引 找到最右边1位的索引 (该操作不应该是架构依赖)。 我已经使用按位移位完成了这项工作,但我必须迭代几乎所有的位(es.32)。 例如,计算1: unsigned int number= …; while(number != 0){ if ((number & 0x01) != 0) ++count; number >>=1; } 其他操作类似。 所以我的问题是:有没有更快的方法呢?

C读二进制stdin

我正在尝试构建一个指令管道模拟器,我在开始时遇到了很多麻烦。 我需要做的是从stdin读取二进制文件,然后在操作数据时以某种方式将其存储在内存中。 我需要一个接一个地读取正好32位的块。 我如何一次读取正好32位的块? 其次,我如何存储它以便以后操作? 这是我到目前为止所做的,但是检查我进一步阅读的二进制块,它看起来不正确,我不认为我正在读取我需要的32位。 char buffer[4] = { 0 }; // initialize to 0 unsigned long c = 0; int bytesize = 4; // read in 32 bits while (fgets(buffer, bytesize, stdin)) { memcpy(&c, buffer, bytesize); // copy the data to a more usable structure for bit manipulation later // more stuff buffer[0] […]