我正在使用Python来编写嵌入式系统中内存(32位地址)中特定位置的某些操作.
当我将这些地址转换为字符串,整数和十六进制值时,似乎会出现尾随的L. 这可能是一个真正的痛苦,例如以下看似无害的代码将无法正常工作:
int(hex(4220963601))
Run Code Online (Sandbox Code Playgroud)
或这个:
int('0xfb96cb11L',16)
Run Code Online (Sandbox Code Playgroud)
有谁知道如何避免这种情况?
到目前为止,我已经提出了这种方法来剥离字符串的尾随L,但它看起来并不优雅:
if longNum[-1] == "L":
longNum = longNum[:-1]
Run Code Online (Sandbox Code Playgroud) 我正在使用MinGW GNU编译器编写C++,当我尝试在switch语句中使用外部定义的整数变量时会出现问题.我得到以下编译器错误:" case标签不会减少为整数常量 ".
因为我已经将整数变量定义为extern我相信它应该编译,有谁知道问题可能是什么?
以下是一个例子:
TEST.CPP
#include <iostream>
#include "x_def.h"
int main()
{
std::cout << "Main Entered" << std::endl;
switch(0)
{
case test_int:
std::cout << "Case X" << std::endl;
break;
default:
std::cout << "Case Default" << std::endl;
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
x_def.h
extern const int test_int;
Run Code Online (Sandbox Code Playgroud)
x_def.cpp
const int test_int = 0;
Run Code Online (Sandbox Code Playgroud)
此代码将在Visual C++ 2008上正确编译.此外,我的Montanan朋友检查了ISO C++标准,看起来任何const-integer表达式都应该有效.这可能是编译器错误还是我错过了一些明显的东西?
这是我的编译器版本信息:
从C:/ MinGW/bin /../ lib/gcc/mingw32/3.4.5/specs
读取规格配置:../ gcc-3.4.5-20060117-3/configure --with-gcc --with- gnu-ld --with-gnu-as --host = mingw32 --target = mingw32 --prefix =/mingw --enable-threads --disable-nls --enable-languages …
我有一个类X,我想将其放入std :: map类型的STL映射中.STL映射需要将X存储在某个地方的内存中,所以我正在寻找一种有效的(运行时和内存)方式来创建X并将其存储在地图中.
我注意到下面的代码,其中x是X类型的对象,stlMap是std :: map类型的映射:
stlMap["test"] = x;
Run Code Online (Sandbox Code Playgroud)
调用以下结果:
为什么要创建这么多X对象?
这是时间和记忆的低效利用吗?
有没有更好的方法将对象放入地图?也许将地图更改为x*的字符串映射?
我有一个STL容器,我需要对容器中的每个元素执行一个操作.但是如果操作在任何元素上失败,我想要反转已经更改过的任何元素的操作.
例如,如果我有一个STL向量,指向一个数字bankAccount类,并希望每个增加50美元.但是,如果任何银行账户的失败由50增加,我想50 $任何已增加了账户的完全和减少取消的增加.
std::vector<bankAccount*> bankAccounts;
std::vector<bankAccount*>::iterator iter;
for (iter = bankAccounts.begin(); iter != bankAccounts.end(); ++iter)
{
try
{
iter->increaseBalance(50);
}
catch (...)
{
// One of the bankAccounts failed to increase by 50, now I need to go
// back and decrease by 50 all of the bankAccounts that have already
// been increased.
}
}
Run Code Online (Sandbox Code Playgroud)
有没有优雅的方法来做到这一点?也许使用STL算法或使用反向迭代器?