- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Linux 系统,该系统设置为某个语言环境并运行一个 C++ 应用程序。我可以从 C++ 应用程序或操作系统本身执行 std::setlocale(LC_NUMERIC, "en_US.UTF-8")
(通过更改 /etc/default/locale
).我无权访问 main 函数,所以我在我的函数中执行了 std::setlocale(LC_NUMERIC, "en_US.UTF-8")
并且它工作正常。
但是,我想在我的应用程序中以对象级别或某个全局级别(一次)执行此操作。我在网上看了很多,但没有找到太多帮助,所以决定问问。这是我的 GPS 位置结构
所以,基本上
//struct Position : std::numpunct<char> {
struct Position {
Position() { isValid = PR_FALSE; lat = 0; lng = 0; elevation = 0; };
PRBool isValid;
double lat;
double lng;
double elevation;
//char do_decimal_point() const { return '.'; } // separate with slash
};
然后,在我的函数中我做了
mycheckposition(){
Position checkPosition;
Position mPosition;
// get some data in above.
double distance;
GetDistanceBetweenWGS84Coords(checkPosition, mPosition, distance);
}
我的问题是我应该在哪里有效且安全地进行 setlocale。我的 Position 值获取逗号而不是点,然后 GetDistanceBetweenWGS84Coords 失败。我系统上的 LC_NUMERIC 代表带小数的数字的逗号。可能是,如果有人想查看 GetDistance 函数,就在这里。
int GetDistanceBetweenWGS84Coords(const Position& from, const
Position& to, double& distance)
{
const double EARTH_RADIUS_IN_METERS = 6372797.560856;
const double DEG_TO_RAD = 0.017453292519943295769236907684886;
double latitudeArc = (from.lat - to.lat) * DEG_TO_RAD;
double longitudeArc = (from.lng - to.lng) * DEG_TO_RAD;
double latitudeH = sin(latitudeArc * 0.5);
latitudeH *= latitudeH;
double lontitudeH = sin(longitudeArc * 0.5);
lontitudeH *= lontitudeH;
double tmp = cos(from.lat*DEG_TO_RAD) * cos(to.lat*DEG_TO_RAD);
double arcInRadians = 2.0 * asin(sqrt(latitudeH + tmp*lontitudeH));
distance = EARTH_RADIUS_IN_METERS * arcInRadians;
return 0; //success
}
我确实找到了可以解决我的问题的方法,但还没有成功。不确定 this 中是否有描述链接遵循标准库。
最佳答案
我前段时间回答了类似的问题,并试图澄清语言环境的问题,所以如果您想了解更多信息:stod does not work correctly with boost::locale .简而言之:
在您的插件中调用 std::setlocale
不是一件好事,因为它是整个应用程序的全局状态,您可能会弄乱应用程序的其他部分应用。至少您应该在完成后立即重置语言环境。
如果您使用 std::stream
(stringstream
、cin
、cout
),那么流的语言环境与创建流对象时全局 C++ 语言环境的值相匹配。通常它是经典的“C”语言环境。但是没有任何保证,因为应用程序的某些部分可以像您一样操纵它。
您可以通过调用 std::stream::imbue
确保 std::stream
具有理想的语言环境。这只会操纵您的流而不是全局状态。
例如:
std::stringstream stream;
stream.imbue(std::locale::classic());//classical locale "C" with separator '.'
关于c++ - 在对象级别或应用程序级别使用 setlocale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35180816/
我想弄清楚 C++ 是如何支持 Unicode 的。 当我想将多语言文本输出到控制台时,我调用 std::setlocale .但是我注意到结果取决于之前对 setlocale 的调用. 考虑以下示例
如果我不使用fputws使用setlocale,则仅输出ASCII字母。似乎setlocale是必需的,并且根据this site,setlocale(LC_CTYPE, "UTF-8")和setlo
不允许在共享CentOS服务器上进行编译。因此,我在我的 Debian 计算机上编译我的程序,将其与 Debian 的系统库(如 libc 等)链接。然后我上传我的程序和 Debian 系统库,我的程
我需要为我的应用程序创建一个 SQLite 数据库。我需要用几种欧洲语言存储文本,因此会有大量重音字符和其他奇怪的标记。我正在扩展 SQLiteOpenHelper。 检查 .db 文件时,我注意到有
This paper说 setlocale() 是线程不安全的。是否有任何线程安全的方法来设置语言环境。 我正在用 C++ 编写代码,但如果有任何不同,C 库中的函数将使用语言环境。 这基本上就是我现
这个问题在这里已经有了答案: Is setlocale thread-safe function? (6 个答案) 关闭 6 年前。 CppRef states 2016-12-13 09:00 U
我编写了一个将 wstring 转换为字符串的函数。如果我删除代码 setlocale(LC_CTYPE, ""),程序就会出错。我引用了 cplusplus阅读文档。 C string contai
以下程序使用 setlocale() 从环境变量中获取区域设置,并打印时间。 locale_test.c: // locale test #include #include #include /
我正在学习 C++,我发现了 C++ 库的这个功能:setlocale ( http://www.cplusplus.com/reference/clocale/setlocale/ ) 但我无法理解
我有一个 Linux 系统,该系统设置为某个语言环境并运行一个 C++ 应用程序。我可以从 C++ 应用程序或操作系统本身执行 std::setlocale(LC_NUMERIC, "en_US.UT
我们目前面临的问题是,当使用 Windows 文件打开/保存对话框时加载的外部组件(不幸的是我们不知道是哪个)一些系统更改了进程的区域设置,可能是通过调用 setlocale(LC_ALL, "").
我需要更改线程中的区域设置以正确解析带有 strtod() 的 double ,为此我使用 setlocale() (C++)。它是线程安全的吗? 更新:另一个问题。当我在 main() 函数中调用
我有一些带有(瑞士)法语字符的字符串,我想大写(PHP 5.3)。 echo strtoupper('société'); 由于 strtoupper() 不适用于重字符,我做了一个 setlocal
根据 PHP,“语言环境信息由每个进程维护”。我的理解是否正确,这与使用 Apache 服务器的每个脚本实例相同? 换句话说,如果我有几个使用不同区域设置的并发 session ,一个用户区域设置的更
问题已解决(见下文) 我已经在我的服务器上生成了区域设置,我已经确认它们存在(我的区域设置 -a 在下面提供),但是当我使用时: setlocale(LC_TIME,'fr_FR');
我想在 php 中对包含德语“umlaute”的数组进行排序。这对于php来说似乎不是一件容易的事。我在网上找到了以下示例: $oldLocale=setlocale(LC_COLLATE, "0")
setlocale() 的默认设置是什么意思? setlocale()默认为“C”(“POSIX”)。但这到底是什么意思呢?它的默认字符集和语言是什么?是“en_US.utf8”吗? 最佳答案 来自
setlocale() 函数没有设置所需的语言(德语)。 目标是输出月份名称。 这是我到目前为止的测试代码:
JSTL 标签用于设置用户本地化环境。 语法 JSP 标签的语法如下: 其中: localcode:代表语言代码,例如,ZH、EN。也可以在后面加上国家或者地区的两位数代码,中间用_连接,如
#include #include #include "mainwindow.hpp" #include "../RegisterOfErrors.hpp" #include extern st
我是一名优秀的程序员,十分优秀!