我需要用下面的大十六进制数做一些算术,但是当我尝试输出时,我得到溢出错误消息"十六进制数> 0xffffffff非可移植",有关不可移植的消息,或最大32位十六进制值FFFFFFFF.
所有这些都意味着标准语言和输出例程只能处理32位值.我需要64位值,并做了很多研究,但我没有发现BOTH启用算术AND以十六进制输出大数字.
my $result = 0x00000200A0000000 +
( ( $id & 0xFFFFF ) * 2 ) + ( ( $id / 0x100000 ) * 0x40000000 );
Run Code Online (Sandbox Code Playgroud)
因此,对于具有以下值的$ id,我应该得到$result:
$id = 0, $result = 0x00000200A0000000
$id = 1, $result = 0x00000200A0000002
$id = 2, $result = 0x00000200A0000004
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
以下是我不确定的研究结果,原因如下:
如何在Perl中求和大十六进制值?模糊,回答不是确切的精确,没有例子.
整数溢出 无定论
整数溢出 无定论
bigint 没有关于赋值,算术或输出的信息
bignum 例子不接近我的问题.
我怎样才能在Perl中使用大字符? 给出的示例对我来说不够信息:不处理十六进制赋值或算术.
Re:密码生成器 使用Fleximal的一些例子,提到to_str输出变量的值但1)我没看到变量是如何分配的,2)我得到错误"无法调用方法"to_str"没有包或对象参考"当我使用它运行我的代码时.
字符串到十六进制 使用Math :: BigInt的示例对我不起作用 - 仍然会出现溢出错误.
是否有64位十六进制()? 几乎在那里 - 但不处理以十六进制输出大数字,它只涉及十进制.
CPAN Math:Fleximal 执行算术运算,但似乎没有任何方法可以实际输出仍为十六进制的值
对于以下代码
struct orderSlip
{
char source[64];
char destination[64];
char item[64];
int position;
};
//global
struct orderSlip data[100];
Run Code Online (Sandbox Code Playgroud)
除了以下方法之外,还有其他方法可以打印出每个元素的数据:
printf("%s\n",data[0].source);
printf("%s\n",data[0].destination);
printf("%s\n",data[0].item);
printf("%i\n\n", data[0].position);
printf("%s\n",data[1].source);
printf("%s\n",data[1].destination);
printf("%s\n",data[1].item);
printf("%i\n", data[1].position);
Run Code Online (Sandbox Code Playgroud)
等等
for(int n = 0; n< 3; n++)
{
printf("%s\n",data[n].source);
printf("%s\n",data[n].destination);
printf("%s\n",data[n].item);
printf("%i\n\n", data[n].position);
}
Run Code Online (Sandbox Code Playgroud)
要删除和添加,我是否必须创建一个动态的结构数组?如果是这样,最简单的语法是什么?像这个c ++代码的东西
int * bobby;
bobby = new int [5];
delete bobby[5];
Run Code Online (Sandbox Code Playgroud)
但在C?我猜它与malloc和free有关
我正在为SAM3N arm cortex-M3微控制器编写一个C程序.当我尝试打印浮点数时,它只打印'f'.示例:仅printf("%f",43.12);打印f,而不是43.12.
但用整数打印效果很好.
如何启用浮动的完整打印?我知道默认情况下,编译器禁用浮动打印以减少代码大小(即看起来,它们链接了缩减版本).另请注意,CFLAGS=-Dprintf=iprintfmakefile中没有使用.
工具详情:
在网上:使用printf添加两个数字(不使用任何运算符),如下所示:
main()
{
printf("Summ = %d",add(10,20))
return 0;
}
int add(int x,int y)
{
return printf("%*d%*d",x,' ',y,' ');
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释,这是如何工作的:
return printf("%*d%*d",x,' ',y,' ');
Run Code Online (Sandbox Code Playgroud)
注意:当我称之为"sum"时,这会失败,如下所示:
sum(1,1) or sum(3,-1)
Run Code Online (Sandbox Code Playgroud) 任何人都知道是否可以使用printf打印VARIABLE位数?
以下代码行正好打印2:
printf("%.2lf", x);
Run Code Online (Sandbox Code Playgroud)
但是我要说我有一个变量:
int precision = 2;
Run Code Online (Sandbox Code Playgroud)
有没有办法在printf中使用它来指定位数?
否则我将不得不写一个'switch'或'if'结构.
谢谢
我正在尝试创建一个函数,该函数采用可变数量的std :: string参数并使用它格式化字符串。
例:
Test::formatLine(const string::format, ...)
{
const std::string buffer;
va_list args;
va_start(args, format);
vsprintf(buffer.c_str, format.c_str, args);
va_end(args);
cout << buffer << endl;
}
Run Code Online (Sandbox Code Playgroud)
编译此代码段错误:
Error 1 error C3867: 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str': function call missing argument list; use '&std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str' to create a pointer to member
Run Code Online (Sandbox Code Playgroud)
我要实现的目标:
Test t = Test();
t.formatLine("Hello %s!", "monsieur");
Run Code Online (Sandbox Code Playgroud)
应该打印 Hello monsieur!
t.formatLine("Hello %s %s! How %s you today?", "good", "sir", "are");
Run Code Online (Sandbox Code Playgroud)
应该打印 Hello good sir! How are you today?
它甚至有可能使用va_list,并vsprintf与std::string只,避免 …
我想找到两个数字的最大值,然后打印出来.我想要打印所有三个数字.我使用以下代码.
#include<stdio.h>
#include<conio.h>
main()
{
//clrscr();
int a,b,c;
printf("insert two numbers:");
scanf("%d%d", &a, &b);
c = (a>b) ? a : b;
printf("\nmaximum of %d",a," and %d",b," is = %d" c);
getch();
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到两个语法错误(请参见附图).有人可以帮帮我吗?

当C printf()及其系列由命令行编译gcc并-Wall在命令行上使用时,编译器会根据正在使用的格式字符串警告错误的参数.作为一个例子,下面的代码会得到一条错误消息,说明格式指定了3个参数,但实际上你只传递了两个.
printf("%d%d%d", 1, 2);
Run Code Online (Sandbox Code Playgroud)
在编写包装器时printf(),如何保留此功能?一种功能或宏的形式将是我能想到的.但是简单的解析器也是可以接受的.
可以在stackoverflow上找到编写printf包装器的几种方法.两种常见的方法是使用vprintf和varargs,并使用__builtin_apply.我试过这两种方法,都没有用.
我试图理解printf如何使用宽字符(wchar_t).
我做了以下代码示例:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
wchar_t *s;
s = (wchar_t *)malloc(sizeof(wchar_t) * 2);
s[0] = 42;
s[1] = 0;
printf("%ls\n", s);
free(s);
return (0);
}
Run Code Online (Sandbox Code Playgroud)
输出:
*
Run Code Online (Sandbox Code Playgroud)
这里一切都很好:我的字符(*)被正确显示.
我想展示另一种角色.在我的系统上,wchar_t似乎编码为4个字节.所以我试着显示以下字符:
É
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
wchar_t *s;
s = (wchar_t *)malloc(sizeof(wchar_t) * 2);
s[0] = 0xC389;
s[1] = 0;
printf("%ls\n", s);
free(s);
return (0);
}
Run Code Online (Sandbox Code Playgroud)
但这次没有输出,我尝试使用"编码"部分(参见上一个链接)中的许多值s[0](0xC389,201,0xC9)...但我从未得到过É显示的字符.我也试过%S而不是%ls.
如果我尝试像这样调用printf:printf("<%ls>\n", …
为什么printf "%d\n" 3暧昧而不是show 3?是否printf可以重写模块以提供自动消除歧义?据推测,show必须在较低层次上完成printf......或者是否存在一些重要的区别printf,show这需要消除数字的歧义?
如果printf 可以重写以自动处理数字而不明确消除歧义,那么正在show做什么?如何在show不:: Int消除歧义的情况下将数字转换为字符串printf?
这是show(没有消除歧义)的正确操作以及printf(消除歧义)的正确操作:
$ cat printStrLnShow3
import Text.Printf
main = putStrLn (show 3)
$ runghc printStrLnShow3
3
$ cat printfWithInt3
import Text.Printf
main = printf "%d\n" (3 :: Int)
$ runghc printfWithInt3
3
Run Code Online (Sandbox Code Playgroud)
这里是不明确的变量时,错误printf也没有歧义的数量:
$ cat printfWithAmbiguous3
import Text.Printf
main = …Run Code Online (Sandbox Code Playgroud)