小编Ala*_*irG的帖子

在C#中取消引用字符串

请原谅我的懒惰.我知道,我可以通过阅读来解决这个问题,但我想我会给你们其中一个C#天才有机会赢得一些代表.

我有一个INI文件中的数据文件,如某些C代码和一些C#代码需要读取的格式.C代码期望字符串值用引号括起来.C#等效代码使用了一些我无法控制的底层类,但基本上它包含引号作为输出字符串的一部分.即数据文件内容

MY_VAL="Hello World!"
Run Code Online (Sandbox Code Playgroud)

给我

"Hello World!"
Run Code Online (Sandbox Code Playgroud)

在我的C#字符串中,当我真的需要它来包含时

Hello World!
Run Code Online (Sandbox Code Playgroud)

我如何有条件地(在第一个和最后一个字符为")时删除引号并获取我想要的字符串内容.

c# string

27
推荐指数
3
解决办法
2万
查看次数

新C++是否向后兼容

我多年没用C++编写代码了.我最近发现,在那些年里它发生了巨大变化.我不确定我是否喜欢这些变化,但这是另一个讨论.

我仍然有一些C++代码敲我的硬盘.如果我把它拿出来并尝试用一个不错的新C++编译器编译它,比如说最新版本的g ++,它会编译吗?没有警告(假设它之前没有警告编译)?

最近我确实搞乱了一些VC++ 2010,并发现了一些我期望工作的东西不起作用,并且当我尝试使用NULL时根据上下文得到不同的消息.但是在该代码的一部分中,我使用NULL甚至没有警告.

c++

9
推荐指数
4
解决办法
3575
查看次数

我们可以获取信号量或条件变量的文件描述符吗?

我有一个双向消息通道的实现,为了减少开销,我实现了几个循环的消息缓冲区.要从一端写入另一端,将指向消息的指针添加到一个循环缓冲区,并调整其读取和写入索引.要向另一个方向写入,请对其他缓冲区执行相同操作,依此类推.代码小而简单,它避免了使用管道或fifo的开销,尽管可能在某些方面可能是更好的解决方案.

我通过简单地检查是否存在等待读取的消息以及如果没有对在将消息添加到相关阵列时发出信号的条件变量进行定时等待来实现对此的轮询.

现在我有一个应用程序需要在套接字上(或多或少)同时在消息通道上等待.我现在希望我使用了fifo或pipe,但由于代码更改的开销(长篇故事),重写它以使用fifo或pipe是不可行的.

有没有办法获得与条件变量关联的文件描述符?如果是这样,一次对两个文件描述符实现轮询更容易,一个用于条件变量,一个用于套接字.

出于好奇,并使这个问题对于具有类似问题的其他人更有用,是否可以获得与信号量相关联的文件描述符,以便您可以同时轮询信号量和常规文件描述符?

c multithreading

5
推荐指数
1
解决办法
6057
查看次数

错误"'fdopen'未声明为"使用g ++ 4编译,使用g ++ 3编译

我有快速编译g ++版本3.something的代码.然后我想构建一些其他包含C++ 11符号的代码,所以我升级到g ++ 4.7.现在我的原始代码没有构建.我收到错误:

'fdopen'未在此范围内声明

根据手册页,fdopen()在stdio.h中声明,我包括在内.我不确定它是否相关,但我在Cygwin环境中工作.我使用的g ++的确切版本是Cygwin提供的版本4.7.2.

我没有更改此代码,因为我切换了编译器,我可以肯定地确认它已构建,我的测试代码运行并通过以前的编译器传递.

根据要求,演示问题的示例代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char **argv)
{
    int   fd;
    FILE *fp;

    fd = open("test.txt", (O_WRONLY | O_CREAT | O_EXCL), S_IRWXU);
    if(0 < fd)
    {
        fp = fdopen(fd, "wb");

        fprintf(fp, "Testing...\n");
        fclose(fp);
    }

    return 0;
}


# g++ -std=c++11 -o test test.cpp
test.cpp: In function 'int main(int, char**)':
test.cpp:14:29: error: 'fdopen' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

c++ g++-4.7

5
推荐指数
2
解决办法
9181
查看次数

包含在Android上转换为转义表示的特殊字符的字符串 - 如何防止这种情况?

在我的家庭网络中,我有一个名为"Den TV"的服务,在"Den"和"TV"之间有一个空格.

当我在移动设备上使用NSD Manager解析此服务时,我使用NsdServiceInfo.getServiceName()获取服务名称并进行记录.我还创建了一个包装NsdServiceInfo对象的对象,并将其添加到ListView的ArrayAdapter中.

日志消息和列表视图都显示字符串"Den \\ 032TV".看起来空格已被替换为"替换"字符(值26或八进制032),然后该字符串已转义为"Den\032TV",然后进一步转义为"Den \\ 032TV".

对我而言,这是非常奇怪的行为.为什么NSD Manager不按"原样"返回字符串.Avahi没有任何问题.即使由于某种原因我无法理解空间被替换,为什么然后被逃脱?两次?

另请注意,空格字符的值为32,因此可能不是八进制值,而是为什么前面的"0"?

谁能帮助我弄清楚如何获得真正的价值?

java string android

5
推荐指数
1
解决办法
734
查看次数

如何在Raspberry Pi上禁用/启用HDMI?

所以我可以使用"tvservice -o"来关闭覆盆子Pi上的HDMI,并使用"tvservice -p"将其重新打开.重新打开之后我显然需要做"fbset -depth 8 && fbset -depth 16"来重新启用帧缓冲区,然后强制重写X11.

我的问题是,我如何在C中这样做?我有一个X11应用程序,我可以管理X11重绘没问题,但如何在C中禁用/重新启用HDMI,以及如何在重新启用HDMI后重新启用帧缓冲?

为了给出背景知识,我有一个无头应用程序作为一种媒体服务器运行,由Android应用程序控制.目前,我暂时禁用超时后关闭HDMI.然而,为了节省能量,我想在不使用应用程序时禁用HDMI,然后重新打开并使用libcec在屏幕上显示RPi应用程序,以确定电视何时使用RPi的HDMI连接打开HDMI和关闭.

c hdmi raspberry-pi

5
推荐指数
1
解决办法
8476
查看次数

如何构建 Cairo/Harfbuzz?

Cairo 依赖于 FontConfig。FontConfig 依赖于 Freetype。我已经构建了 FreeType,但是当我尝试构建 FontConfig 时,我收到链接错误,因为 FreeType 需要 HarfBuzz。

当我尝试构建 Harfbuzz 时,它依赖于 FreeType。因此我们有一个循环依赖。此时的 makefile 已损坏:当它尝试构建测试时,它们无法链接,因为它们需要来自 Harbuzz 本身的符号。这个问题可以通过在链接线上添加两次 HarfBuzz 来解决。或者删除所有测试,这就是我所做的。这样就解决了这个问题。

Harfbuzz 有一个名为“helper-cairo.cc”的文件。当我尝试编译它时,它抱怨缺少 FontConfig 头文件,所以显然存在对 FontConfig 的依赖。但是,如果不先构建 HarfBuzz,我就无法构建 FontConfig!

我不知道如何解决这种依赖性。也许我可以在构建 HarfBuzz 时禁用 Cairo 助手,使用生成的库构建 FontConfig,然后使用生成的 FontConfig 重建 HarfBuzz,然后重建 FontConfig?这一切看起来都是一个很大的麻烦。

我正在使用 MinGW 进行构建,而 Windows DLL 不喜欢未解析的符号,因此我认为我无法使用共享库来解决此问题。我不太确定为什么在链接 FontConfig 时需要 HarfBuzz - 也许它正在尝试构建 DLL :(

有什么想法可以在不丢失重要功能的情况下解决这个问题吗?

mingw cairo fontconfig harfbuzz

5
推荐指数
1
解决办法
1474
查看次数

如何使用 CMake 为导入的共享库指定包含目录?

我正在使用 cmake 版本 3.9.1。

我的源代码树中有第三方共享库和头文件。我正在尝试将其添加为链接目标。

我能找到的所有文档都说这应该有效:

test.cpp

#include "ftd2xx.h"

int main(int argc, char **argv)
{
    FT_HANDLE handle;
    FT_STATUS status = FT_Open(1, &handle);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt

cmake_minimum_required (VERSION 3.6)
project(test_proj CXX)
add_subdirectory(ftdi)
add_executable(mytest test.cpp)
target_link_libraries(mytest ftd2xx)
Run Code Online (Sandbox Code Playgroud)

ftdi/CMakeLists.txt

add_library(ftd2xx SHARED IMPORTED)
set_target_properties(ftd2xx PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR})
set_target_properties(ftd2xx PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)

然而,编译包含“ftd2xx.h”的 test.cpp 会抱怨它找不到头文件,并且-I<path>生成的 makefile 中缺少相关条目。

如果我将库指定为INTERFACE而不是SHARED IMPORTED正确找到头文件,但是 CMake 会设置IMPORTED_LOCATION属性。

如果我将库指定为INTERFACE而不是SHARED IMPORTED然后用于target_link_libraries直接指向库文件,则这适用于 Windows 而不适用于 Linux。

我很感激任何人可以提供的任何帮助。

cmake

5
推荐指数
1
解决办法
1633
查看次数

std::setprecision 设置有效数字的数量。如何使用 iomanip 设置精度?

我一直发现 iomanip 令人困惑和反直觉。我需要帮助。

快速互联网搜索发现(https://www.vedantu.com/maths/precision)“因此,我们将精度视为十进制数中小数点有效数字的最大数量”(重点是我的)。这也符合我的理解。但是我写了一个测试程序并且:

stm << std::setprecision(3) << 5.12345678;
std::cout << "5.12345678: " << stm.str() << std::endl;
stm.str("");

stm << std::setprecision(3) << 25.12345678;
std::cout << "25.12345678: " << stm.str() << std::endl;
stm.str("");

stm << std::setprecision(3) << 5.1;
std::cout << "5.1: " << stm.str() << std::endl;
stm.str("");
Run Code Online (Sandbox Code Playgroud)

输出:

5.12345678: 5.12
25.12345678: 25.1
5.1: 5.1
Run Code Online (Sandbox Code Playgroud)

如果精度为 3,则输出应为:

5.12345678: 5.123
25.12345678: 25.123
5.1: 5.1
Run Code Online (Sandbox Code Playgroud)

显然,C++ 标准对与浮点数相关的“精度”的含义有不同的解释。

如果我做:

stm.setf(std::ios::fixed, std::ios::floatfield);
Run Code Online (Sandbox Code Playgroud)

然后前两个值的格式正确,但最后一个值显示为5.100.

如何在没有填充的情况下设置精度?

c++ iomanip

5
推荐指数
1
解决办法
138
查看次数

在C/C++中,如何确定库是否静态链接

我有一个提供一些功能的静态库。我有使用这个库的应用程序。其中一些应用程序是命令行应用程序或作为守护程序/服务运行。其中一些应用程序是 GUI 应用程序。

该库提供了提供 GUI 元素的功能,以允许用户对其进行配置。我以两种风格构建图书馆:GUI 风格和 CLI 风格。然后我将适当的版本链接到应用程序。

我希望能够通过将该库的 GUI 功能分离到提供 GUI 支持的单独“扩展”库中来改进/简化问题。我的计划是在运行时主库以某种方式检测 GUI 支持库的存在。如果存在,则它会实例化 GUI 库中提供必要功能的对象,如果不存在,它会实例化自身的对象,该对象提供与“存根”函数相同的 API,这些函数不执行任何操作或根据需要返回错误。这两个对象将从一个共同的纯虚拟抽象基类继承。

这必须在运行时完成,因为我希望能够将主库的完全相同的二进制文件链接到 CLI 和 GUI 应用程序,而不是依赖于编译时开关,根据定义,编译时开关会导致不同的二进制文件。

我一直在考虑在主库中实现这样的函数:

bool SupportsGUI() { return false; }
Run Code Online (Sandbox Code Playgroud)

然后在 GUI 支持库中实现相同的功能,如下所示:

bool SupportsGUI() { return true; }
Run Code Online (Sandbox Code Playgroud)

然后,在链接应用程序时,以某种方式强制链接器解析链接以使用 GUI 支持库(如果存在)中的链接。

我不知道如何让它发挥作用。

假设两个库都是静态库,我如何在运行时从一个库确定链接应用程序是否也链接了另一个库?

或者,如何在链接时用在单独的库中实现的一组等效函数覆盖在一个库中实现的一组函数。

c c++

5
推荐指数
1
解决办法
976
查看次数

标签 统计

c++ ×4

c ×3

string ×2

android ×1

c# ×1

cairo ×1

cmake ×1

fontconfig ×1

g++-4.7 ×1

harfbuzz ×1

hdmi ×1

iomanip ×1

java ×1

mingw ×1

multithreading ×1

raspberry-pi ×1