我有一个应用程序需要接受数百万个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) 我需要将字符串转换为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)
这似乎都不起作用,我得到了一个形式感觉.
对于我根据规范编写的程序,变量作为字符串传递给函数.我需要将该字符串设置为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)
感谢先进的帮助!
给定一个应该代表数字的字符串,我想把它放入一个转换函数,如果整个字符串没有转换就会提供通知.
输入"12"::
istringstream::operator>> 输出12atoi 输出12stoi 输出12对于输入,"1X"我想要一个失败的响应,但我得到:
istringstream::operator>> 输出1atoi 输出1stoi 输出1输入"X2":
istringstream::operator>> 输出0并设置错误标志atoi 输出0stoi 抛出错误[ 实例 ]
有没有办法在输入上引发错误行为"1X"?
我正在使用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) 我已将此 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) 当我尝试使用 to_string()将ethereum_types::H256转换 为String时
\n\nuse ethereum_types::H256;\n\nfn main() { \n let s = H256::zero();\n println!("{}", s);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我期望输出是
\n\n"0x0000000000000000000000000000000000000000000000000000000000000000" \nRun Code Online (Sandbox Code Playgroud)\n\n但输出是
\n\n"0x0000\xe2\x80\xa60000"\nRun Code Online (Sandbox Code Playgroud)\n 我在 C++ 中看到了很多将字符串转换为数字的选项。
其中一些实际上建议使用标准 C 函数,例如atoi和atof。
我还没有看到有人建议使用以下选项,该选项仅依赖于 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)
上述实现有哪些缺点?
有没有更简单/更干净的方法来实现这种转换?
如何将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) 日语 Windows 操作系统上的 C# 应用程序 - 将拉丁语显示为全角字符
我在上面的链接中引用了接受的答案,并使用下面的代码将日语字符串从全宽转换为半宽,但它返回相同的全宽字符串而不进行转换。
string userInput = "??????????";
string result = userInput.Normalize(NormalizationForm.FormKC);
Run Code Online (Sandbox Code Playgroud)
半宽的预期输出:?????????? 实际输出:?????????? (全屏宽度)
但是,即使上面的代码应该将全角字符串转换为半角,当我将半角字符串 (??????????) 传递给上面的代码时,它也会将其转换为全角形式(????????????)。
我在这里做错了什么?
无论如何,如果我的字符串已经是半角,我不希望执行上面的代码。
如何检查字符串是半宽还是全宽?