标签: string-conversion

优化数百万个char*到字符串转换

我有一个应用程序需要接受数百万个char*作为输入参数(通常字符串小于512个字符(在unicode中)),并将它们转换并存储为.net字符串.

它结果是我的应用程序性能的真正瓶颈.我想知道是否有一些设计模式或想法使其更有效.

有一个关键部分让我觉得它可以改进:有很多重复.假设有100万个对象进入,可能只有50个独特的char*模式.

为了记录,这里是我用于将char*转换为字符串的算法(此算法在C++中,但项目的其余部分在C#中)

String ^StringTools::MbCharToStr ( const char *Source ) 
{
   String ^str;

   if( (Source == NULL) || (Source[0] == '\0') )
   {
      str = gcnew String("");
   }
   else
   {
      // Find the number of UTF-16 characters needed to hold the
      // converted UTF-8 string, and allocate a buffer for them.
      const size_t max_strsize = 2048;

      int wstr_size = MultiByteToWideChar (CP_UTF8, 0L, Source, -1, NULL, 0);
      if (wstr_size < max_strsize)
      {
         // Save the malloc/free overhead if it's a …
Run Code Online (Sandbox Code Playgroud)

c# algorithm performance c++-cli string-conversion

7
推荐指数
1
解决办法
535
查看次数

将字符串转换为double或float c#

我需要将字符串转换为double.或漂浮,无论什么最适合这种类型的转换.

字符串是"25.00".

我如何转换这个字符串,以便我可以在计算中使用它?

我尝试过:

string s1 = "2";
string s2 = "25.00";

double d1 = Convert.ToDouble(s1);
double d2 = Convert.ToDouble(s2);
double d3 = d2 * d1;
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

string s1 = "2";
string s2 = "25.00";

double d1 = double.Parse(s1);
double d2 = double.Parse(s2);
double d3 = d2 * d1;
Run Code Online (Sandbox Code Playgroud)

和:

string s1 = "2";
string s2 = "25.00";

float f1 = float.Parse(s1);
float f2 = float.Parse(s2);
float f3 = f2 * f1;
Run Code Online (Sandbox Code Playgroud)

这似乎都不起作用,我得到了一个形式感觉.

c# double string-conversion

7
推荐指数
1
解决办法
9653
查看次数

从字符串转换为char - c ++

对于我根据规范编写的程序,变量作为字符串传递给函数.我需要将该字符串设置为char变量以设置另一个变量.我该怎么做呢?

这是在头文件中:

void setDisplayChar(char displayCharToSet);
Run Code Online (Sandbox Code Playgroud)

这是设置它的功能:

void Entity::setElementData(string elementName, string value){
    if(elementName == "name"){
            setName(value);
    }
    else if(elementName == "displayChar"){
    //      char c;
      //      c = value.c_str();
            setDisplayChar('x');//cant get it to convert :(
    }
    else if(elementName == "property"){
            this->properties.push_back(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

感谢先进的帮助!

c++ string char string-conversion

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

强制String到int函数消耗整个字符串

给定一个应该代表数字的字符串,我想把它放入一个转换函数,如果整个字符串没有转换就会提供通知.

输入"12"::

  • istringstream::operator>> 输出12
  • atoi 输出12
  • stoi 输出12

对于输入,"1X"我想要一个失败的响应,但我得到:

  • istringstream::operator>> 输出1
  • atoi 输出1
  • stoi 输出1

输入"X2":

  • istringstream::operator>> 输出0并设置错误标志
  • atoi 输出0
  • stoi 抛出错误

[ 实例 ]

有没有办法在输入上引发错误行为"1X"

c++ string atoi string-conversion extraction-operator

6
推荐指数
1
解决办法
508
查看次数

将Uint8Array转换为node.js中的十六进制字符串等效项

我正在使用node.js v4.5.假设我有这个Uint8Array变量.

var uint8 = new Uint8Array(4);
uint8[0] = 0x1f;
uint8[1] = 0x2f;
uint8[2] = 0x3f;
uint8[3] = 0x4f;
Run Code Online (Sandbox Code Playgroud)

这个数组可以是任何长度,但我们假设长度是4.

我想有一个函数,转换uint8为十六进制字符串等效.

var hex_string = convertUint8_to_hexStr(uint8);
//hex_string becomes "1f2f3f4f"
Run Code Online (Sandbox Code Playgroud)

string-conversion node.js

6
推荐指数
3
解决办法
8754
查看次数

“无法识别的标记 'com':期待('true'、'false' 或 'null')”

我已将此 json 转换为字符串以保存在本地数据库中

{
        "type": "file",
        "id": "b665ff0b-5f7b-4991-ae88-ac5054880223",
        "link": {
            "href": "https://s3-eu-west-com/87e9edff-e7bd-49ea-aa7a-8948cac29bc1/b665ff0b-5f7b-4991-ae88-ac5054880223.jpg"
        },
        "file_name": "sony 431.jpg",
        "mime_type": "image/jpeg",
        "file_size": 66727,
        "public": true,
        "meta": {
            "dimensions": {
                "width": 1500,
                "height": 1500
            },
            "timestamps": {
                "created_at": "2018-01-22T11:07:35.527Z"
            }
        },
        "links": {
            "current": "https://api.e-com.com/v2/files/b665ff0b-5f7b-4991-ae88-ac5054880223"
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我通过转换为 JSON 来使用该字符串时,我收到错误消息

“无法识别的标记 'com':期待('true'、'false' 或 'null')”

我该如何解决该错误?

这就是我将这个 json 转换为字符串的方式:

staticFile1.setFile(file.toString());
Run Code Online (Sandbox Code Playgroud)

和字符串到json:

File file1 = new ObjectMapper().readValue(file, File.class);
Run Code Online (Sandbox Code Playgroud)

java android json string-conversion jsonexception

6
推荐指数
1
解决办法
1万
查看次数

在 Rust 中将 ethereum_types::H256 转换为字符串

当我尝试使用 to_string()将ethereum_types::H256转换 为String时

\n\n
use ethereum_types::H256;\n\nfn main() {   \n    let s = H256::zero();\n    println!("{}", s);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我期望输出是

\n\n
"0x0000000000000000000000000000000000000000000000000000000000000000" \n
Run Code Online (Sandbox Code Playgroud)\n\n

但输出是

\n\n
"0x0000\xe2\x80\xa60000"\n
Run Code Online (Sandbox Code Playgroud)\n

string-conversion rust

6
推荐指数
1
解决办法
2265
查看次数

在 C++ 中将字符串转换为数字

我在 C++ 中看到了很多将字符串转换为数字的选项。

其中一些实际上建议使用标准 C 函数,例如atoiatof

我还没有看到有人建议使用以下选项,该选项仅依赖于 C++ STL:

int Str2Num(const string& str) // can be called with a 'char*' argument as well
{
    int num;
    istringstream(str)>>num;
    return num;
}
Run Code Online (Sandbox Code Playgroud)

或者更一般地说:

template <typename type>
type Str2Num(const string& str) // can be called with a 'char*' argument as well
{
    type num;
    istringstream(str)>>num;
    return num;
}
Run Code Online (Sandbox Code Playgroud)

上述实现有哪些缺点?

有没有更简单/更干净的方法来实现这种转换?

c++ stl string-conversion

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

将float转换为string并始终获取特定的字符串长度?

如何将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)

java string-formatting number-formatting string-conversion

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

在 C# 中检查字符串是半宽还是全宽

日语 Windows 操作系统上的 C# 应用程序 - 将拉丁语显示为全角字符

我在上面的链接中引用了接受的答案,并使用下面的代码将日语字符串从全宽转换为半宽,但它返回相同的全宽字符串而不进行转换。

string userInput = "??????????";
string result = userInput.Normalize(NormalizationForm.FormKC);
Run Code Online (Sandbox Code Playgroud)

半宽的预期输出:?????????? 实际输出:?????????? (全屏宽度)

但是,即使上面的代码应该将全角字符串转换为半角,当我将半角字符串 (??????????) 传递给上面的代码时,它也会将其转换为全角形式(????????????)。

我在这里做错了什么?

无论如何,如果我的字符串已经是半角,我不希望执行上面的代码。

如何检查字符串是半宽还是全宽?

c# asp.net string-conversion asp.net-core string-operations

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