Tag: 二进制

GCC错误:二进制+的操作数无效

为什么GCC给我这个错误? 我在这做错了什么? temp.c: In function main: temp.c:6: error: invalid operands to binary + 码: main() { char *Address1,*Address2,*NewAddress; Address1= (char*)0x12; Address2= (char*)0x34; NewAddress = Address1+Address2; }

在C中将符号扩展名从16位扩展到32位

我必须为16位整数做一个符号扩展,由于某种原因,它似乎没有正常工作。 谁能告诉我代码中的bug在哪里? 我已经工作了几个小时。 int signExtension(int instr) { int value = (0x0000FFFF & instr); int mask = 0x00008000; int sign = (mask & instr) >> 15; if (sign == 1) value += 0xFFFF0000; return value; } 指令(instr)是32位,在里面我有一个16位的数字。

在C中的另一个目录中打开文件

这是如何实现的? 我想用 pFile = fopen( file, “rb” ); 其中file是char,string或long,包含包含二进制文件本地路径的文本文本 C:\Documents and Settings\Supernovah\Desktop\Supernovah.bin 但当然崩溃了。 我也对如何以便携方式重复当前目录感兴趣。 windows.h有点难看,但如果我不能以便携的方式做到这一点。 就这样吧。 谢谢 :)

无符号字符c = 255是“11111111”还是不是?

这是我的问题代码: #include “stdio.h” int main() { char a = -1; unsigned char b = 255; unsigned char c = 0; if((~a) == c) printf(“OK 1”); else printf(“bad 1”); printf(“\n”); if((~b) == c) printf(“OK 2”); else printf(“bad 2”); printf(“\n”); } 我希望这打印: OK 1 OK 2 但是,我得到OK 1和坏2! 如果unsigned char b是255(11111111),那么~b应该是00000000.为什么它不等于c? 我使用gcc在Linux SUSE上工作。

C中的二元向量和矩阵操作

我试图在C中实现一个数据结构,这将允许我有效地操作**二进制**矩阵(仅包含1或0)。 我将解释我必须对此矩阵应用哪些操作,并想知道使用哪种最佳数据结构? 操作在字段F_2中完成(这意味着1 + 1 = 0,其他操作保持不变)。 我有一个叫做H k * n矩阵( k < n )。 最多, k = 2325, n = 3009。 我必须对此矩阵执行的操作是: 我将仅使用行交换和行添加来部分对角化它。 一旦完成,我将不再使用行操作,并将在此矩阵上运行大量(!)列添加 (我的意思是“很多”是关于((nk)/ 2)³列添加) 我正在考虑矩阵的数据结构: 对于矩阵系数,我考虑在一个单个unsigned int中一次存储多个位的序列。 例如,我可以将序列(11001011)存储到uint8_t 203 (从二进制转换为十进制) 这是个好主意吗 ? 如果我这样做,我有两个选择: 我可以使用uint16_t或uint64_t系数在许多4 * 4或8 * 8子矩阵中分割我的矩阵H. 这是一个很好的选择(在时间效率方面),如果是,是否更好地使用uint16_t或uint64_t ? 另外我在考虑将每一行存储在多个uint32_t或uint64_t ,然后操作我的部分对角化。 接下来切换到将矩阵编码为n列向量以处理剩余操作的结构。 你认为这更有效吗? 无论我使用什么方法,我都必须有效地访问unsigned int的第n位( uint16或64 )。 我怎么做 ?

将未知的hex数字转换为经度和纬度

F3 c8 42 14 – latitude //05.13637° should be nearby this coordinate 5d a4 40 b2 – longitude //100.47629° should be nearby this coordinate 这是我从GPS设备获得的hex数据,如何转换为可读坐标? 我没有任何手册文件。请帮助。谢谢 22 00 08 00 c3 80 00 20 00 dc f3 c8 42 14 5d a4 40 b2 74 5d 34 4e 52 30 39 47 30 35 31 […]

将真正的大数字从二进制转换为十进制并打印出来

我知道如何将二进制转换为十进制。 我知道至少2种方法:桌子和电源;-) 我想将二进制转换为十进制并打印此十进制。 而且,我对这个“十进制”不感兴趣; 我想要打印它。 但是,正如我上面所写,我只知道将二进制转换为十进制的两种方法,并且它们都需要添加。 所以,我在二进制中计算1或0的某个值,并将其添加到记忆值。 这是一个很薄的地方。 我有一个非常大的数字(1和64个零)。 转换时我需要在某些“变量”中放置一些中间结果。 在C中,我有一个`int’类型,它只有4个字节,不超过10 ^ 11。 因此,在从二进制转换为十进制时,我没有足够的内存来存储中间结果。 正如我上面写的那样,我对这个十进制不感兴趣,我只想打印结果。 但是,我没有看到任何其他方法来解决它;-(是否有任何解决方案从二进制“只打印”? 或者,也许,我应该使用类似BCD(二进制编码的十进制)的东西进行中间表示? 我真的不想使用这个,因为它不是那么跨平台(英特尔的处理器有内置function,但对于其他我需要编写自己的实现)。 我很高兴听到你的想法。 谢谢你的耐心等待。 语言:C

字符常量的C编码

我的程序员的本能会说c中的字符常量(例如:’x’)是使用编译它的机器上的机器字符集编码的。 但是,以下内容来自“C编程语言:ANSI C版” “字符常量是用单引号括起来的一个或多个字符的序列,如’x’。只有一个字符的字符常量的值是执行时机器字符集中字符集的数值。” 强调最后3个字。 任何人都可以解释为什么他们会说“在执行时”。 当然,字符值是在编译的二进制文件(或ELF,A.OUT ……)中编码的? 我在想,但无法为此提出任何合理的解释,肯定K&R知道他们在做什么!

奇怪的0x0D被添加到我的二进制文件中

我有这个奇怪的问题: 我写了16个字符到一个二进制文件,然后我写了3个整数但是当我用一些二进制文件查看器打开我的文件时,我看到一个额外的字节被添加(等于0x0D )。 这是我的代码: for(i = 0; i < 16; i++) { if(i < strlen(inputStr)) { myCharBuf[0] = inputStr[i]; } else { myCharBuf[0] = 0; } fwrite(myCharBuf, sizeof(char), 1, myFile); } myIntBuf[0] = inputNumber1; fwrite(myIntBuf, sizeof(int), 1 ,myFile); myIntBuf[0] = inputNumber2; fwrite(myIntBuf, sizeof(int), 1 ,myFile); myIntBuf[0] = inputNumber3; fwrite(myIntBuf, sizeof(int), 1 ,myFile); 我得到以下字节值: 61 00 […]

在C中从二进制转换为char

我对如何从二进制值转换为c中的char感到困惑。 例如,假设我有01010110,并希望从中打印相应的字母’V’。 我该怎么做呢? 谢谢你的帮助!