将十六进制字符串转换为相同格式的长字符串[重复]
Posted
技术标签:
【中文标题】将十六进制字符串转换为相同格式的长字符串[重复]【英文标题】: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
是“长整数”的缩写。十六进制是二进制数据的字符串表示形式。
【参考方案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,酷以上是关于将十六进制字符串转换为相同格式的长字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章
我正在使用二进制阅读器将字符串转换为字节,如何将字节反转回相同的字符串 [重复]