我正在尝试编译2007年编写的C++软件包,我收到了这个错误:
error: ‘uint32_t’ does not name a type
这是在使用g ++ 4.5.2的64位Ubuntu中发生的.它使用g ++ 4.1.2在64位CentOS上编译良好.
#include
我缺少一个或一个编译器标志吗?或者,我应该typedef
用来分配uint32_t
一个size_t
或者一个unsigned int
?
我在项目中切换到固定长度的整数类型主要是因为它们帮助我在使用它们时更清楚地考虑整数大小.包括他们通过#include <inttypes.h>
还包括了如印刷宏一帮其他的宏PRIu32
,PRIu64
...
要为固定长度变量分配常量值,我可以使用像UINT32_C()
和的宏INT32_C()
.每当我分配一个恒定值时,我就开始使用它们.
这导致代码类似于:
uint64_t i;
for (i = UINT64_C(0); i < UINT64_C(10); i++) { ... }
Run Code Online (Sandbox Code Playgroud)
现在我看到几个不关心它的例子.一个是stdbool.h
包含文件:
#define bool _Bool
#define false 0
#define true 1
Run Code Online (Sandbox Code Playgroud)
bool
在我的机器上有1个字节的大小,所以它看起来不像int
.但是,0
和1
应应自动转为正确的类型由编译器整数.如果我在我的示例中使用它,代码将更容易阅读:
uint64_t i;
for (i = 0; i < 10; i++) { ... }
Run Code Online (Sandbox Code Playgroud)
那么我何时应该使用固定长度的常量宏UINT32_C()
,何时应该将该工作留给编译器(我正在使用GCC)?如果我在MISRA C中编写代码怎么办?
我很难理解*(uint32_t*)
.
让我说我有
uint32_t* ptr;
uint32_t num
*(uint32_t*)(ptr + num); //what does this do? does it
Run Code Online (Sandbox Code Playgroud) 您好我使用带有adafruit盾牌的Arduino UNO来显示分数值,但用于显示分数的功能仅接受char*值,分数本身最多可占用6位数(000,000到999,999).我曾尝试使用sprint(),但我没有运气,因为屏幕会像疯了一样闪烁.我认为问题是chars只保留一定数量的字节,不能适应32位int但我认为他们是一种方法.绘制文本是屏蔽在屏幕上绘制的函数,输入为char*,颜色代码,大小,x像素,y像素.如果有人可以帮我转换这两种类型,请告诉我.如果他们是替代品,也会帮助我.
我的代码:
char* textToWrite;
uint32_t currentScore = 0;
uint32_t highScore = 0;
highScore = currentScore;
sprintf(textToWrite,"%d.%d.%d.%d\0", currentScore);//sprint f not working properly right now
drawText(textToWrite, ST7735_WHITE, 1, 100, 10);
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用:
sprintf(textToWrite,"%u", currentScore);
Run Code Online (Sandbox Code Playgroud) 我一直在处理的代码要求我uint32_t
以十六进制打印一个类型的变量,填充为0,最小长度为8.到目前为止我用来执行此操作的代码是:
printf("%08lx\n",read_word(address));
Run Code Online (Sandbox Code Playgroud)
其中read_word返回类型uint32_t.我使用jx,llx等格式无济于事,是否有正确的格式可以使用?
编辑:
我发现问题在于我正在经历的事情.函数read_word从uint32_t向量返回一个值.这似乎是导致输出hex的问题.这是一个通过引用/值问题传递,修复是什么?
read_word函数:
uint32_t memory::read_word (uint32_t address) {
if(address>(maxWord)){
return 0;
}
return mem[address];
}
Run Code Online (Sandbox Code Playgroud)
记忆减速:
std::vector<uint32_t> mem=decltype(mem)(1024,0);
Run Code Online (Sandbox Code Playgroud) 我有
uint32_t bits = 0;
bits |= 1<< 31;
bits |= 1<< 15;
bits |= 1<< 14;
bits |= 1<< 13;
Run Code Online (Sandbox Code Playgroud)
这给了我10000000000000001110000000000000
而在我做的另一个功能*(bits) |= 0 << 15;
但它没有做任何事情,它应该将第16个1更改为0,所以以下应该来:10000000000000000110000000000000
任何帮助?
ntohl
需要一个uint32_t
.我有许多不同成员(类型uint32_t
或uint16_t
)的消息.是否有可能正确地传递所有收到的struct
或者union
转换成说出uint32_t
然后reinterpret_cast
进入我的union
或struct
?
我一直在做的是逐行列出,union
或者struct
将每个成员传递给ntohl/s,msg.member = ntohl(msg.member);
但这很麻烦!
数据结构从C#.NET应用程序(Windows)整体传输到Linux应用程序.
我试过的时候
void* ptr = &msg;
uint32_t temp = (uint32_t)ptr;
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说:
错误:从'void*'转换为'uint32_t'会失去精度
LPC_CAN1->TDA1 = *(uint32_t *) &msg->data[0]; // Write first 4 data bytes
Run Code Online (Sandbox Code Playgroud)
请告诉我为什么使用*(uint32_t )以及uint32_t之前和之后这个" " 的用途是什么
我有一个struct
类似于:
typedef struct _pair_t{
uint16_t keylen; // 2
uint32_t vallen; // 4
} __attribute__((__packed__)) pair_t;
Run Code Online (Sandbox Code Playgroud)
我将使用mmap
从文件中读取,所以我想将数字存储为大端.
我是否需要这样做htobe16
/ betoh16
或者有一些__attribute__
可以为我做到这一点?
众所周知,要打印变量值,类型是固定宽度整数类型之一(如uint32_t
),您需要包含cinttypes
(在C++中)或inttypes.h
(在C中)头文件,并使用格式说明符宏PRIu32
.但是在使用wprintf
函数时如何做同样的事情?L
在这种情况下,这样的宏应该扩展为带有前缀的字符串文字.
编辑:请忽略这个问题.我意识到我是一个白痴,非常友好和乐于助人的人指出iostream不是C而是C++库.
我遇到了一个非常奇怪的问题.
我有一个完全工作的程序(大约1000行).我需要
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
当我这样做时,uint32_t的typedef会中断.
它被定义为这样
typedef unsigned __int32 uint32_t;
Run Code Online (Sandbox Code Playgroud)
我正在使用Visual Studio 2017.这是它给出的错误
\ vc\tools\msvc\14.15.26726\include\cstdlib(19):错误C2061:语法错误:标识符'noexcept'
当我将鼠标悬停在现在的下划线uint32_t时,会出现以下情况:
uint32_t变量"uint32_t"不是类型名称
评论这条线
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
该程序按预期编译和运行.
是什么赋予了?
边题.我使用uint32_t的原因是为了保证我的变量是32位长,因为我正在进行大量的位操作.使用unsigned int会安全吗?
这是我包括的所有内容的列表:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <iostream>
typedef unsigned __int32 uint32_t;
Run Code Online (Sandbox Code Playgroud)