小编Bha*_*kar的帖子

在连续的内存块中进行位计数

我在接受采访时被问到以下问题.

int countSetBits(void *ptr, int start, int end); 
Run Code Online (Sandbox Code Playgroud)

概要: 假设ptr指向一大块内存.将此存储器视为连续的位序列,start并且end是位位置.假设startend 具有适当的值,ptr并指向初始化的内存块.

问: 写C代码来计算从设置的位数startend[含],返回计数.

只是为了让它更清晰

 ptr---->+-------------------------------+
         | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
         +-------------------------------+
         | 8 | 9 |                   |15 |
         +-------------------------------+
         |                               |
         +-------------------------------+
              ...
              ...
         +-------------------------------+
         |               | S |           |
         +-------------------------------+
              ...
              ...
         +-------------------------------+
         |    | E |                      |
         +-------------------------------+
              ...
              ...
Run Code Online (Sandbox Code Playgroud)

我的解决方案 …

c c++ algorithm bit-manipulation

16
推荐指数
2
解决办法
1984
查看次数

htonl()和ntohl()对整数的输出相同

我在little-endian [LE]机器[Linux,Intel处理器]上运行了以下程序.我无法在下面的代码片段中解释3个输出.由于机器是LE,因此值a存储为0x78563412.打印时,它显示其实际值.由于它是LE机器,我希望ntohl()它是一个无操作和显示器0x78563412,它正在做.但是,我希望0x12345678第二个打印声明包含htonl().有人可以帮我理解他们为什么一样吗?

int main() 
{
    int a = 0x12345678; 

    printf("Original - 0x%x\n", (a)); 
    printf("Network - 0x%x\n", htonl(a)); 
    printf("Host - 0x%x\n", ntohl(a)); 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Original - 0x12345678
Network - 0x78563412
Host - 0x78563412
Run Code Online (Sandbox Code Playgroud)

c endianness

11
推荐指数
3
解决办法
3万
查看次数

通过检查核心和调用堆栈来了解使用GDB的C指针

我已经用C语言进行了一段时间的专业编程,但是仍然对一些与指针相关的问题感到困惑。我非常感谢SO社区对理解以下问题的帮助。

以下代码崩溃并生成了核心文件。

void func1()    // Frame 1 in GDB stack trace.  
{ 
    UTYPE  *ptr;  // pointer to user defined type  
    ...

    // data is of type UTYPE and has valid contents.
    // lets say its address is 0x100 
    ptr = &data;     --- (1)  
    ...

    func2(ptr);      --- (2) 
    ...
} 

void func2(UTYPE *inp)    // Frame 0 in GDB stack trace.  
{
    if(!inp)         --- (3) 
        return; 
    ...

    // another_ptr is of UTYPE * which is a NULL.  
    inp = another_ptr;   ---- (4) …
Run Code Online (Sandbox Code Playgroud)

c stack gdb pointers

5
推荐指数
1
解决办法
226
查看次数

Git提交补丁

有没有办法将一系列提交导出到Git的补丁中.假设我需要从存储库导出最后5个提交并将它们导入另一个存储库.我该怎么做呢?

对此的帮助将不胜感激.

git git-diff

4
推荐指数
1
解决办法
3678
查看次数

`git log` 输出与输入日期格式不同

这是我的git log命令:

git log --no-merges --date=format:'%Y-%m-%d' --format=format:'%C(bold blue)%h%C(reset) %C(green)%cD%C(reset) %C(cyan)%an%C(reset) %sd'
Run Code Online (Sandbox Code Playgroud)

这是输出:

b4d6b7b8c Wed, 24 Aug 2022 19:31:20 -0700 FirstName1 LastName1 Sample subject 1
14d2b9170 Wed, 24 Aug 2022 19:23:12 -0700 FirstName2 LastName2 Sample subject 2
8c4fda8b2 Wed, 24 Aug 2022 18:53:54 -0700 FirstName3 LastName3 Sample subject 3
...
Run Code Online (Sandbox Code Playgroud)

我期待2022-08-24输出中的日期格式。

我阅读了 Git 文档,特别是--date选项。我犯了什么错误?这是否与提交者日期(%cD)无法更改为我要求的格式有关?

git date

2
推荐指数
1
解决办法
21
查看次数

标签 统计

c ×3

git ×2

algorithm ×1

bit-manipulation ×1

c++ ×1

date ×1

endianness ×1

gdb ×1

git-diff ×1

pointers ×1

stack ×1