可能重复:
是否有printf转换器以二进制格式打印?
还在学习C和我在想:
给定一个数字,是否可以执行以下操作?
char a = 5;
printf("binary representation of a = %b",a);
> 101
Run Code Online (Sandbox Code Playgroud)
或者我是否必须编写自己的方法来转换为二进制?
我将参与一个大型的大会项目,但现在我刚开始学习这种新语言.我试图做一些简单的例子,比如你可能在highschool找到c ++(总和两个数字,是数字素数等).
现在我必须显示所有素数到n.问题是应用程序冻结在"call printf",我不明白为什么.
你能帮帮我吗?
.section .data
prime_number_str:
.asciz "%d "
.section .text
.global _start
_start:
pushl $20
call .first_prime_numbers
addl $4, %esp
pushl $0
call exit
.first_prime_numbers: #argument first n numbers
movl 4(%esp), %ecx #get the first argument
do_test:
pushl %ecx #push function arguments
call .prime
addl $4, %esp #restore the stack
#if not prime jump to the next number
cmpl $0, %eax
je no_not_prime
#print the number
pushl %eax #save eax
pushl %ecx #first argument
pushl $prime_number_str #text …Run Code Online (Sandbox Code Playgroud) $cc a.c
$./a.out < inpfilename
Run Code Online (Sandbox Code Playgroud)
我想在stdout上打印inpfilename.我怎么做 ?我在这里先向您的帮助表示感谢...
现在在你想到之前,"这已经完成了"请继续阅读.
像大多数尝试执行查找bash脚本的人一样,你最终会将脚本硬编码为单行命令,但最终会在接下来的几个月/几年内编辑这个内容,所以你希望最后你做得对第一次.
我现在正在编写一个小备份程序来备份目录并需要找到它们,而不是需要排除的Directorie列表.说起来容易做起来难.让我开始吧:
#!/bin/bash
BasePath="/home/adesso/baldar"
declare -a Iggy
Iggy=( "/cgi-bin"
"/tmp"
"/test"
"/html"
"/icons" )
IggySubdomains=$(printf ",%s" "${Iggy[@]}")
IggySubdomains=${IggySubdomains:1}
echo $IggySubdomains
exit 0
Run Code Online (Sandbox Code Playgroud)
现在在这结束时你得到/ cgi-bin,/ tmp,/ test,/ html,/ icons 这证明了这个概念有效,但是现在为了更进一步,我需要使用find来搜索BasePath并搜索所有子目录只有一个级别,并排除数组中的子目录列表...
如果我手动输入,它将是:
find /var/www/* \( -path '*/cgi-bin' -o -path '*/tmp' -o -path '*/test' -o -path '*/html' -o -path '*/icons' \) -prune -type d
Run Code Online (Sandbox Code Playgroud)
我是否应该想循环到每个子目录并做同样的事情......我希望你明白我的观点.
所以我想要做的似乎是可能的,但我有一点问题,printf",%s"不喜欢我使用所有这些find -path或-o选项.这是否意味着我必须再次使用eval?
我试图在这里使用bash的功能,而不是一些for循环.任何建设性的意见将不胜感激.
考虑以下:
DateTime = {'2007-01-01 00:00';'2007-02-01 00:00';'2007-03-01 00:00'};
Headers = {'Datetime','Data'};
Dat = [100,200,300];
Data = [DateTime,num2cell(Dat')];
Final = [Headers;Data];
Run Code Online (Sandbox Code Playgroud)
如何将"Final"中的数据写入制表符分隔的文本文件中.我知道如何在变量仅由数字输入组成时使用fopen,fprintf等,但我正努力解决这个问题.我试过了:
fid = fopen('C:\Documents\test.txt','wt');
fprintf(fid,'%s\t%s\n',Final{:});
fclose(fid);
Run Code Online (Sandbox Code Playgroud)
但是,这不会生成与matlab中生成的文本格式相同的文本文件.怎样才能解决这个问题?
当我运行以下程序时,我没有得到任何输出.
#include <stdio.h>
int main()
{
printf("hello");
while(1)
{
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而如果我编辑printf命令在字符串的末尾添加一个'\n'字符,那么预期的输出就会出现.第一个代码中发生了什么?我简直无法理解.
我在unix脚本中有以下行:
head -1 $line | cut -c22-29 >> $file
Run Code Online (Sandbox Code Playgroud)
我想在没有换行符的情况下附加此输出,而是用逗号分隔.有没有办法将此命令的输出提供给printf?我试过了:
head -1 $line | cut -c22-29 | printf "%s, " >> $file
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
printf "%s, " head -1 $line | cut -c22-29 >> $file
Run Code Online (Sandbox Code Playgroud)
这些都没有奏效.有人有主意吗?
我有以下结构:
/** The description of an ordinary 8+3 DOS directory entry. */
struct dirent
{
byte d_name[8]; //!< space padded name
byte d_ext[3]; //!< space padded extension
byte d_attr; //!< the file attributes
......
};
printf("%s\n", de.d_name);
Run Code Online (Sandbox Code Playgroud)
我面临的问题是打印d_name我得到以下输出: 'INSTALL BAT!' 这不是我最想要的8个字符.
我的猜测是printf函数继续在内存中搜索字符串终止符,即使它超出了d_name边界.
有没有办法只打印'INSTALL'或者我是否需要遍历整个字节数组并单独打印字符?
由于printf 函数每次使用时都会返回一个整数值(屏幕上写入的字符数),因此int每次printf调用时都不应强制将此值存储在变量中吗?
编辑:
如果函数返回某个值,为什么C不需要在函数调用时存储该值?
我正在尝试在x86_64程序集中打印浮点数,但它只是将值打印为零.
关于这个问题已经存在一些问题.通过确保设置在%al中使用的向量寄存器的数量,似乎可以解决一个问题.另一个表明你需要一个16字节的堆栈对齐.但是,我正在做这两件事而仍然没有得到正确的输出.
这是我的计划:
# prints a floating point value
.section .rodata
.fmt: .string "num: %f\n"
.num: .float 123.4
.section .text
.global main
.type main, @function
main:
subq $8, %rsp # 16-byte alignment
# print my number
movss .num, %xmm0 # load float value
movq $.fmt, %rdi # load format string
movb $1, %al # use 1 vector register
call printf
# exit
addq $8, %rsp # undo alignment
movq $0, %rax # return 0
ret
Run Code Online (Sandbox Code Playgroud)