【问题标题】:Convert hexadecimal string to long in the same format [duplicate]将十六进制字符串转换为相同格式的长字符串[重复]
【发布时间】:2020-10-15 07:31:36
【问题描述】:

我有这个代码:

string IDNumber = "0x0037D70D";

long x = 0x0037D70D; //Working

long x = long.Parse(IDNumber); //Error Input string was not in a correct format.

需要将上面的字符串 (IDNumber) 发送到 long y,并且应该保持变量格式和典型值,因为它以 0x.... 开头,与 IDNumber 字符串中的相同

请帮助我。

编辑:

我在 DLL 文件中有一个函数,这个函数接受一个数据类型为 long 的参数

如果我给这个长参数提供像 0x0037D70D 这样的值,那么函数可以正常工作并完成所需的工作,但是如果我给长参数提供任何其他格式的值,比如 3659533,函数就不起作用

string example1 = "0x0037D70D";
long example2 = 0x0037D70D;

最后,我得到了字符串格式的值,例如 example1,我想将其转换为 example2,因为如果我将值写成 example2 格式并保存在 long 变量中,那么它就可以工作

更新: 问题解决了,我使用此功能与外部硬件设备进行通信,多次尝试设备挂起后,我让设备休息,@Kirill Polishchuk 建议的解决方案为我工作。

long l = Convert.ToInt64(IDNumber, 16);

【问题讨论】:

  • 这个副本回答了你的问题:Convert integer to hexadecimal and back again
  • 请包括您收到的错误。
  • @Ňɏssa Pøngjǣrdenlarp 这不是这种情况,因为我想将十六进制保留在 long 变量中而不将其转换为整数
  • @John 我得到的错误是输入字符串的格式不正确。
  • long 是“长整数”的缩写。十六进制是二进制数据的字符串表示形式。

标签: c# c#-4.0


【解决方案1】:

你应该去掉0x前缀:

long y = long.Parse(IDNumber.Replace("0x", ""), System.Globalization.NumberStyles.HexNumber);
long x = 0x0037D70D; //Working
Console.WriteLine(x.ToString("X")); //prints "37D70D", no prefix

【讨论】:

    【解决方案2】:

    我建议使用Convert 类:

    long l = Convert.ToInt64(IDNumber, 16);
    

    【讨论】:

    • 这会将十六进制转换为整数,结果将是 3659533 而不是 0x0037D70D
    • @WaleedELerksosy ...那到底有什么问题? 0x0037D70D is a hexadecimal representation of 3659533。你还能做什么?如果您希望它是十六进制(字符串)格式,为什么要将其转换为长格式?
    • 我在 DLL 文件中有一个函数,这个函数接受一个数据类型为 long 的参数如果我给这个参数一个像 0x0037D70D 这样的值,那么这个函数可以正常工作并完成所需的工作,但如果我在任何其他格式,如 3659533 函数都不起作用 string example1 = "0x0037D70D";长示例2 = 0x0037D70D;最后,我得到了像 example1 这样的字符串格式的值,我想将其转换为 example2,因为如果我有像 example2 这样写的值,那么它就可以工作
    • 谢谢,问题解决了:)
    • @WaleedELerksosy,酷
    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2013-10-29
    • 2014-12-04
    • 1970-01-01
    相关资源
    最近更新 更多