小编geo*_*hei的帖子

awk 单引号或双引号的用法

为什么 awk 命令使用单引号和双引号不能产生相同的结果?

root@vm90:/root# who | awk "{ print $2 }"
...
root@vm90:/root# who | awk '{ print $2 }'
...
Run Code Online (Sandbox Code Playgroud)

我想在 PHP shell_exec() 函数中使用 awk,该函数在整个代码中使用简单引号。

这 ...

$output = shell_exec("who | awk '{ print $2 }'");
Run Code Online (Sandbox Code Playgroud)

...有效,但我更喜欢...

$output = shell_exec('who | awk "{ print $2 }"');
Run Code Online (Sandbox Code Playgroud)

……这个,不行。

php awk

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

带符号 int 的位移位重置过多

请看下面的代码片段,它基本上只是将 1 个字节向左移动 24 位。

uint64_t i = 0xFFFFFFFF00000000;
printf("before: %016llX \n", i);
i += 0xFF << 24;
printf("after : %016llX \n", i);

// gives:
// before: FFFFFFFF00000000
// after : FFFFFFFEFF000000
Run Code Online (Sandbox Code Playgroud)

最重要的 32 位是FFFFFFFEE在最后观看)。这并不像我预期的那样。我不明白为什么左移 1 个字节 24 位会触及位 #32(位 #31 应该是最后一个修改的)它把最后一个F( 1111) 变成了E( 1110) 。

为了使其正常工作,我使用了0xFF无符号 ( 0xFFU)。

uint64_t i = 0xFFFFFFFF00000000;
printf("before: %016llX \n", i);
i += 0xFFU << 24;
printf("after : %016llX \n", i); …
Run Code Online (Sandbox Code Playgroud)

c unsigned bit-shift

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

为什么将fgetc()返回到char iso int?

我想将二进制文件源复制到文件目标.而已!该代码的灵感来自Internet上的许多示例.

#include <stdio.h>

int main(int argc, char **argv) {

    FILE *fp1, *fp2;
    char ch;

    fp1 = fopen("source.pdf", "r");
    fp2 = fopen("target.pdf", "w");

    while((ch = fgetc(fp1)) != EOF)
        fputc(ch, fp2);

    fclose(fp1);
    fclose(fp2);

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

结果文件大小不同.

root@vm:/home/coder/test# ls -l
-rwxr-x--- 1 root root 14593 Feb 28 10:24 source.pdf
-rw-r--r-- 1 root root   159 Mar  1 20:19 target.pdf
Run Code Online (Sandbox Code Playgroud)

好的,那有什么问题呢?

我知道char是未签名的,并且在80以上时签名.请看这里.

这在我使用时得到证实,printf("%x\n", ch);它有时会返回大约50%的时间FFFFFFE1.

我的问题的解决方案是使用intiso char.

找到的示例char:示例1,示例2 示例3, …

c variables fgetc

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

标签 统计

c ×2

awk ×1

bit-shift ×1

fgetc ×1

php ×1

unsigned ×1

variables ×1