Tag: 字节

C字节读取器中的分段故障(核心转储)

我有一个系统操作类简介,它有两个不同的部分,第一个是读取可执行文件的简单程序,逐个字节,输出的字符串长度至少为4个字符。 它是您可以在UNIX中使用的字符串程序(命令)的简单建模。 我遇到了三个单独的示例可执行文件的分段错误(核心转储)错误。 我理解这实际上意味着我正在尝试访问一些我无法访问的内存地址(通过过度获取程序拥有的已分配块,或者通过其他方式)。 不幸的是,我不明白为什么这个程序正在这样做。 我认为问题在于我的链表实现 – 我用它来存储可读的字符,然后在不可读的字符出现时检查链表是否有4个条目。 如果有,我打印出来。 然后我清除链表并重新开始。 我逐字节遍历文件,我觉得这个程序的逻辑是合理的。 但是,我对指针,地址和malloc的完全理解并不合理。 由于缺乏知识,我预感到分段错误正在发生。 有人可以看看下面的代码,并找出我做错了什么? 最重要的是,你能解释一下我滥用的概念,为什么? 我担心程序应该按照它应该的方式运行,是的,但也担心我缺乏理解。 代码如下 – 谢谢。 #include #include struct node{ char ANSII; struct node *next_node; }; void clear_list(struct node *first_node); void print(struct node *first_node); int counter(struct node *first_node); void append(char temp, struct node *first_node); int main(int argc, char **argv){ FILE *f = […]

24位图像中有多少种颜色组合

我正在读一本书,我不确定这是错误还是我误解了这句话。 它读起来…… 如今,您可以购买的每台PC都有硬件,可以渲染至少1670万种颜色的图像。 这些图像不是包含数千个颜色条目的数组,而是包含每个像素的显式颜色值。 当然,24位显示器使用24位或每像素3个字节来显示颜色信息。 对于红色,绿色和蓝色,这给出了1个字节或256个不同的值。 这通常称为真彩色,因为256 ^ 3(1670万) 他说1个字节等于256个不同的值。 1字节= 8位。 8 ^ 2位= 64种颜色组合对吗? 这对我来说并不合适。 我知道这可能是一件容易理解的事情,但我不明白。

C / C ++将signed char打包成int

我需要将四个带符号的字节打包成32位整数类型。 这就是我的目标: int32_t byte(int8_t c) { return (unsigned char)c; } int pack(char c0, char c1, …) { return byte(c0) | byte(c1) << 8 | …; } 这是一个很好的解决方案? 它是便携式的(不是通信意义上的)吗? 有没有现成的解决方案,也许是提升? 问题我最关心的是将负位从char转换为int时的位顺序。 我不知道应该是什么样的正确行为。 谢谢

64位值的反转字节

我正在尝试为分配反转64位地址指针的字节并具有以下代码: char swapPtr(char x){ x = (x & 0x00000000FFFFFFFF) <> 32; x = (x & 0x0000FFFF0000FFFF) <> 16; x = (x & 0x00FF00FF00FF00FF) <> 8; return x; } 但是,它只是让一切都搞砸了。 但是,类似的function适用于64位长。 是否需要针对指针做一些不同的事情? 我正在进行函数调用的方式是一个问题吗? 对于指针: *(char*)loc = swapPtr(*(char*)loc); 很久了: *loc = swapLong(*loc);

为什么字符串的字节大小比长度长?

为什么sizeof(“Bill”)是5但sizeof(char)是1 ? 不应该使sizeof(“Bill”)为4因为字符串的长度是4个字符( 4 x 1 )? 我相信它可能与”Bill”是一个字符数组有关,但为什么会增加字节大小?

C:构建一个字节

我有一个包含16个元素的数组。 我想将这些评估为布尔值0或1,然后将其存储在2个字节中,以便我可以写入二进制文件。 我该怎么做呢?

在C编程中,“发射”有什么作用?

我最近试图扩展我对C语言的了解,并且遇到了一个使用emit的程序,可能会发出一个字节。 __declspec(naked) void marker_begin() { __asm { _emit 0x51; _emit 0x21; _emit 0x1A; _emit 0x14; _emit 0x2C; _emit 0x5B; } } 这可以用于什么? 提前致谢。

在C / C ++中读/写半字节(没有位字段)

是否有一种简单的方法可以在不使用位字段的情况下读取/写入字节中的半字节? 我总是需要读取两个半字节,但需要单独编写每个半字节。 谢谢!

将2个字节转换为整数

我收到一个端口号为2个字节(最低有效字节优先),我想将它转换为一个整数,以便我可以使用它。 我做了这个: char buf[2]; //Where the received bytes are char port[2]; port[0]=buf[1]; port[1]=buf[0]; int number=0; number = (*((int *)port)); 但是,有一些错误,因为我没有得到正确的端口号。 有任何想法吗?

修改C中二进制文件中的一些字节

有没有办法改变二进制文件中单个字节的值? 我知道如果你以r+b模式打开文件,光标位于现有文件的开头,你在该文件中写入的任何内容都将覆盖现有内容。 但我想在一个文件中只改变1个字节。 我想你可以复制不应修改的文件内容,并在正确的位置插入所需的值,但我想知道是否还有其他方法。 我想要实现的一个例子:将第3个字节更改为67 初始档案: 00 2F 71 73 76 95 写入后的文件内容: 00 2F 67 73 76 95