var_dump((int) 010); //Output 8
var_dump((int) "010"); //output 10
无法理解PHP数据类型转换方法从字符串到整数。
第一个是八进制表示法,因此输出正确。但是什么时候将“010”转换为整数。它也应该输出8。
以下所有答案都是 var_dump((int)010); ,但我想回答 var_dump((int)“010”);
答案 0 :(得分:5)
使用(int)
投射到整数将始终强制转换为默认基数,即10。
以这种方式将字符串转换为数字不会考虑在PHP中格式化整数值的多种方式(对于基数8,前导零和#34; 0x和#34;基数16,领先" 0b"基数2)。它将简单地查看字符串中的第一个字符并将它们转换为基数为10的整数。前导零将被剥离,因为它们在数值中没有意义,因此您最终会得到10
的小数值(int)"010"
。
使用(int)010
在之间转换整数值将考虑格式化整数的各种方法。 010
中的前导零表示数字为八进制表示法,使用(int)010
将其转换为基数为10的十进制值8
。
这类似于使用0x10
以十六进制(基数16)表示法编写的方式。使用(int)0x10
会将其转换为基数10十进制值16
,而使用(int)"0x10"
将以小数值0
结束:因为" x&#34 ;不是数值,之后的任何内容都将被忽略。
如果要将字符串"010"
解释为八进制值,则需要指示PHP执行此操作。 intval("010", 8)
将解释基数为8而不是默认基数10的数字,最终将得到小数值8
。您还可以使用octdec("010")
将八进制字符串转换为十进制值8
。另一个选择是使用base_convert("010", 8, 10)
显式转换数字" 010"从基数8到基数10,但此函数将返回字符串 "8"
而不是整数8
。
答案 1 :(得分:3)
将字符串转换为整数遵循intval
函数使用的逻辑:
使用指定的转换基数(默认值为10)返回var的整数值。
intval
允许指定不同的基数作为第二个参数,而直接转换操作则不允许,因此使用(int)
将始终将字符串视为基数10。
php > var_export((int) "010");
10
php > var_export(intval("010"));
10
php > var_export(intval("010", 8));
8
答案 2 :(得分:1)
以func sendPushMessage(todoItem:TodoItem, isAdded:Bool = true) {
let url = URL(string: "https://fcm.googleapis.com/fcm/send")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let strKey:String = "Here FCM Server Key"
request.setValue("key=\(strKey)", forHTTPHeaderField: "Authorization")
var message:String = ""
if isAdded {
message = "Todo with title '\(todoItem.title)' added"
}
else{
message = "Todo with title '\(todoItem.title)' removed"
}
let dictData = ["to":"/topics/alldevices","priority":"high","notification":["body":message,"title":"Community","badge":"1"]] as [String : Any]
do {
let jsonData = try JSONSerialization.data(withJSONObject: dictData, options: .prettyPrinted)
// here "jsonData" is the dictionary encoded in JSON data
request.httpBody = jsonData
let task = URLSession.shared.dataTask(with: request, completionHandler: { (responseData: Data?, response: URLResponse?, error: Error?) in
let strData :String = String(data: responseData!, encoding: String.Encoding.utf8)!
print("data : \(strData)")
NSLog("\(String(describing: response) )")
})
task.resume()
} catch {
print(error.localizedDescription)
}
}
开头的整数是八进制表示法。
以0
开头的整数(例如0x
)表示十六进制表示法的整数和以0x2A
开头的整数表示二进制表示法(例如0b
)。
答案 3 :(得分:0)
答案 4 :(得分:-1)
PHP处理以零作为八进制开始的数字,因此这个结果是绝对正确的 您应该查找PHP Integers以获取有关此主题的更多信息。