在C++中从字符串中检索unsigned long的最安全和最好的方法是什么?
我知道一些可能的方法.
首先,转换从atol获取的签名长.
char *myStr; // Initalized to some value somehow.
unsigned long n = ((unsigned)atol(myStr));
Run Code Online (Sandbox Code Playgroud)
这个问题的一个明显问题是,当myStr中存储的值大于signed long可以包含的值时会发生什么?atol检索什么?
下一个可能性是使用strtoul.
char *myStr; // Initalized to some value somehow.
unsigned long n = strtoul(myStr, 0, 10);
Run Code Online (Sandbox Code Playgroud)
但是,这对我的需求来说有点复杂.我想要一个简单的函数,字符串输入,unsigned long base 10 out.此外,错误处理还有很多不足之处.
我发现的最后一种可能性是使用sscanf.
char *myStr; // Initalized to some value somehow.
unsigned long n = 0;
if(sscanf(myStr, "%lu", n) != 1) {
//do some error handling
}
Run Code Online (Sandbox Code Playgroud)
同样,错误处理还有很多不足之处,而且比我想要的要复杂得多.
剩下的显而易见的选择是编写我自己的一个包装器,围绕一个先前的可能性或一些循环通过字符串并手动转换每个数字直到它达到ULONG_MAX.
我的问题是,我的google-fu未能找到的其他选项是什么?C++ std库中的任何东西都会将字符串干净地转换为unsigned long并在失败时抛出异常?
如果这是一个骗局,我道歉,但我找不到任何与我完全匹配的问题.
我在表格中有字符串
[3339:1.6101369,1062:1.5,5751:1.5,6376:1.5, ... ]
Run Code Online (Sandbox Code Playgroud)
我想迭代逗号分隔的键值对.最好或最短的方法是什么?
我正在使用Report Builder 3.0构建报告.
我正在使用的源系统具有表示日期格式的字符串mm/dd/yy,但我想将其显示给最终用户dd-MMM-yy.CDate在字符串上使用会给我带来错误,因为它以dd/mm/yy格式(美国区域设置)解释字符串.
有没有办法将字符串正确转换为日期而不更改区域设置(这不是一个真正的选项)?
谢谢!
reportbuilder date reporting-services string-conversion regional-settings
我的问题很简单,但到目前为止我找不到解决方案:
如何在不使用libiconv等额外库的情况下将UTF8编码转换为用C++ 编码string的latin1 string?
到目前为止,我能找到的每个例子都是latin1到UTF8的转换?
代替Chris Eppstein在SASS正在进行的工作中提到的类似Map数据结构的方法,我正在尝试实现类似的方法-将字符串映射到相应的十六进制值,该值将用于指定CSS的Unicode字符内容属性。(我正在尝试重构一些字体图标的SASS代码。)
目前,我有一些基本的东西:
/*icon1 --> \F000
icon2 --> \F001
icon3 --> \F002*/
@function u-char($name) {
@if $name == icon1 {
@return "000";
} @else if $name == icon2 {
@return "001";
} @else if $name == icon3 {
@return "001";
}
}
@mixin icon-class($name) {
...
content: "\f#{u-char($name)}";
...
}
Run Code Online (Sandbox Code Playgroud)
但是我实际上是在尝试映射大量字符,因此这种方法很麻烦。我希望能够做类似的事情:
@function u-char($name) {
$i: 0;
$itemList: item1, item2, item3;
@each $currItem in $itemList {
@if $name == item1 {
@return i-to-hex-str($i);
}
$i: $i + …Run Code Online (Sandbox Code Playgroud) 我在学习C++时遇到的第一个问题是,itoa某些编译器支持该函数,但实际上并未在ANSI-C标准中定义(因此通常被认为是不好的实践).
我已经看到了多种解决方案,比如使用stringstream或者snprintf,对我来说总是感觉非常迂回,最后在C++ 11中std::to_string,从语言的角度来看感觉更清晰.
但为什么要添加更直接的方法需要这么长时间?除了一些关于效率的讨论以及没有充分理由改变标准的渴望之外,我一直难以找到任何东西.有没有正式说明为什么不包含这个或为什么他们最终决定在C++ 11中添加它?是否有任何讨论将此添加到C的未来版本中?
例如,如果我有一个类似
x=True or True
如果我在外壳中评估结果为True
print(x)
x=True
Run Code Online (Sandbox Code Playgroud)
所以现在我想将字符串或输入转换为该逻辑表达式,例如
x=raw_input('Please give an expression:')
我知道表达式是一个字符串,那么如何将该字符串转换为逻辑表达式?
print(x)
x="True or True"
Run Code Online (Sandbox Code Playgroud) python boolean-expression logical-operators string-conversion boolean-operations
C ++中是否有将字符串转换为a uintptr_t或c的函数(C ++ 11,如果有所不同)intptr_t?我总是可以在以后使用atoll()和强制转换它,但是最好得到一个对32位计算机执行32位而对64位计算机执行64位的函数。
char* c = "1234567";
uintptr_t ptr = atoptr(c); // a function that does this;
Run Code Online (Sandbox Code Playgroud) 我发现这种奇怪的atof / stof行为后,我有点沮丧
double bg = std::stof("1,24");
std::cerr<<"comma: "<<bg<<std::endl;
bg = std::stof("1.24");
std::cerr<<"dot: "<<bg<<std::endl;
Run Code Online (Sandbox Code Playgroud)
当我将字符串格式从逗号更改为点时,会发生以下情况:
comma: 1.24
dot: 1
Run Code Online (Sandbox Code Playgroud)
有没有人遇到这个问题?谢谢
巴特
如何将a转换float为a String并始终获取指定长度的结果字符串?
例如,如果我有
float f = 0.023f;
Run Code Online (Sandbox Code Playgroud)
我想要一个6个字符的字符串,我想得到0.0230.但是,如果我想将其转换为4个字符的字符串,结果应该是0.02.此外,-13.459限制为5个字符的值应返回-13.4,并返回10个字符-13.459000.
这就是我现在正在使用的东西,但是要做到这一点还有更漂亮的方法......
s = String.valueOf(f);
s = s.substring(0, Math.min(strLength, s.length()));
if( s.length() < strLength )
s = String.format("%1$-" + (strLength-s.length()) + "s", s);
Run Code Online (Sandbox Code Playgroud)